从angularjs访问我网站的nodejs Express API

Accessing nodejs Express API of my website from angularjs

本文关键字:nodejs Express API 网站 angularjs 访问      更新时间:2023-09-26

我需要为我的网站开发一个混合应用程序,使用ionic for UI,我正在使用node js创建APi。问题是我可以通过浏览器访问API,如果我从angularjs调用同一个API,我无法检索响应。这是节点js端的代码:

var app = require('express')(); 
var http = require('http').Server(app); 
var mysql = require('mysql'); 
var bodyParser = require("body-parser");
var connection = mysql.createConnection({ 
    host : 'localhost',
    user : 'root',
    password : 'root',
    database : 'student',
});
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); 
app.get('/stud',function(req,res){
    connection.query("SELECT * from stu_details",function(err, rows, fields){
        if (err) throw err;
        res.contentType('application/json');
        console.log("entered");
        res.send(JSON.stringify(rows));
        res.end();
    });
});

angularjs:处的代码

var app1 = angular.module('starter', ['ionic']);
app1.controller('mycontrl',function($scope,$http){
    $http.get("http://127.0.0.1:3000/stud")
    .then(function(response) {
        $scope.names = response.body;
    })
});

问题是,在角度侧,它没有进入"然后"函数;即响应不成功。但如果我从浏览器中调用,我可以获取身体部位。

这是因为你的应用程序在不同的端口上运行。可能是8100,而你的express应用程序在3000上运行。该请求是一个跨域ajax请求。有几种方法可以解决这个问题。

  1. 使用Ionic本身为您的API创建代理推荐

    ionic.project文件添加或编辑到您的项目并配置它:

    {
      "name": "your-app",
      "app_id": "",
      "proxies": [
        {
          "path": "/stud",
          "proxyUrl": "http://127.0.0.1:3000/stud"
        }
      ]
    }
    

    然后,您可以在您的应用程序上正常请求/stud,Ionic将代理该请求到您的快递应用程序。您可以将这些规则中的更多规则添加到上面的数组中。

    在这里和这里了解更多信息。

  2. 在您的快递应用程序中启用跨来源资源共享(CORS)。

    你可以在这个帖子上找到如何做到这一点。

  3. 在浏览器上安装扩展以允许CORS,但我不建议这样做,因为这可能会导致访问其他网站的问题。

此外,如果您正在使用这种体系结构,出于安全原因,您可能会在API上使用https

在服务器端添加以下模块后,问题就解决了。

var cors=require('cors');

app.use(cors());