繁体   English   中英

从angularjs访问我网站的nodejs Express API

[英]Accessing nodejs Express API of my website from angularjs

我需要使用ionic for UI为我的网站开发一个混合应用程序,而我正在使用node js进行APi创建。 如果我从我的angularjs调用相同的API,但无法检索响应,则该问题能够通过浏览器访问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;
    })
});

事实是,在角度一侧它没有进入“ then”功能; 即,响应不成功。 但是,如果我从浏览器中调用,我就能得到身体部位。

那是因为您的应用程序在其他端口上运行。 可能是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. 在您的Express应用中启用跨域资源共享(CORS)。

    您可以在该线程上找到操作方法。

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

另外,如果您使用的是这种架构,出于安全原因,您可以在API上使用https

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

var cors = require('cors');

app.use(CORS());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM