[英]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.