簡體   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