[英]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请求。 有几种解决问题的方法。
使用Ionic本身为您的API创建代理。 推荐的
在项目中添加或编辑ionic.project
文件并进行配置:
{ "name": "your-app", "app_id": "", "proxies": [ { "path": "/stud", "proxyUrl": "http://127.0.0.1:3000/stud" } ] }
然后,您通常可以在您的应用程序上请求/stud
,Ionic会将请求转发给您的快速应用程序。 您可以将更多这些规则添加到上面的数组中。
在您的Express应用中启用跨域资源共享(CORS)。
您可以在该线程上找到操作方法。
在浏览器上安装扩展程序以允许CORS,但我不建议这样做,因为这可能会导致访问其他网站时出现问题。
另外,如果您使用的是这种架构,出于安全原因,您可以在API上使用https
。
我在服务器端添加了以下模块后,该问题已解决。
var cors = require('cors');
app.use(CORS());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.