为什么我没有使用angularjs $ http.get()从服务器获取数据?

时间:2016-10-25 11:01:21

标签: javascript angularjs node.js express get

问题应该足够清楚,我的代码应该显示问题。任何问题都只是在下面发表评论。

app.js

var express = require('express');
var app = express();

app.use(express.static('public'));



var characters = {"Griffins": 
    [{"Name":"Lois Griffin",
    "Gender":"Female",
    "Role": "Mother"},

    {"Name":"Chris Griffin",
    "Gender":"Male",
    "Role": "Son"},

    {"Name":"Meg Griffin",
     "Gender":"Female",
     "Role": "Daughter"}]     
 };

app.get("/characters", function(req, res) {
    res.send(characters);
})

app.listen(9000, function(){
    console.log('Running');
});

angular.js

app.controller('listCtrl',function($scope, $http){

    $scope.characterData = function() {
        $http.get("/characters").then(function(data) {
            console.log(data, 'success')
        },function(data) {
            console.log("data, failure.")
        })
    }
})

错误

Failed to load resource: the server responded with a status of 404 (
Object "failure."

错误的对象

Object -
config : Object
data : "Cannot GET /characters↵"
headers : function (d) 
status : 404
statusText : "Not Found"
__proto__ : Object

注意:使用$ http.get('characters.json')时......我可以从名为'character.json'的文件中获取数据。

4 个答案:

答案 0 :(得分:1)

angular中的get方法需要完整的url字符串,可能是这样的:

app.controller('listCtrl',function($scope, $http){
var serverHost = 'example.com';
var serverPort = '9000';

$scope.characterData = function() {
    $http.get("http://'+serverHost+':'+serverPort+'/characters").then(function(data) {
        console.log("success");
        console.log(data);
    },function(data) {
        console.log("failure");
        console.log(data);
    })
  }
});

答案 1 :(得分:1)

404是服务器无法找到资源时服务器发送的代码。导致404响应的原因可能有很多,但最常见的原因是:

  1. 给出错误的路径。
  2. 路径中的拼写问题。
  3. $ http.get(url,[config]):有2个参数被接受。 url是绝对/相对路径。这就是为什么$ http.get('characters.json')正在工作而不是$ http.get('/ characters')的原因。

    所以,你应该使用正确的路径。如果'characters.json'在'\ characters'目录中,你应该给出正确的路径$ http.get('\ characters \ characters.json'),以便服务器可以找到该文件。

    而且,既然你要发送json数据,你应该使用res.json而不是res.send。

答案 2 :(得分:1)

制作characters.json文件并更改app.js中的app.get方法

app.get('/characters', function (req, res) {
   // First read existing users.
   fs.readFile( __dirname + "/" + "characters.json", 'utf8', function (err, data) {
      data = JSON.parse( data );

      console.log( data );
      res.end( JSON.stringify(data ));
   });
})

//change your server configuration

var server = app.listen(8089, function () {
   var host = server.address().address
   var port = server.address().port
   console.log("Example app listening at http://%s:%s", host, port)

})

您可以在html页面中获取Json数据

答案 3 :(得分:0)

我现在的问题似乎正在发挥作用。我不知道发生了什么,我认为使用在线工作空间和虚拟机来运行服务器存在稳定性问题,即使不应该存在。感谢大家的意见,我仍然设法获得了一些好的信息。