js和node.js我遇到了json响应的麻烦。我有一个node.js服务器执行到一个REST api,并且json结果必须发送到一个有角度的客户端但是当我尝试为了读取那个json文件,我获得了[Object,Object]。我无法弄清楚我错过了什么。谢谢你的帮助。 来自REST API的Json文件响应:
[ { cityPK: { name: 'Lodi', region: 'Lombardia' } },
{ cityPK: { name: 'Frosinone', region: 'Lazio' } },
{ cityPK: { name: 'Roma', region: 'Lazio' } },
{ cityPK: { name: 'Tivoli', region: 'Lazio' } } ]
node.js文件:
var http = require('http');
var request = require('request');
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
app.post('/login',function(req,res){
console.log("sono nella post "+req.body.username);
var uid = req.body.username;
var upwd = req.body.password;
res.setHeader('Content-Type', 'application/json');
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header("Access-Control-Allow-Credentials", true);
request({
url: "http://localhost:8080/RestServiceAdmin/webresources/entities.city",
method: "GET",
json: true ,
headers:[{'content-type': 'application/json'}]
}, function (error, response, body){
if(!error & response.statusCode === 200){
res.json(body);
}
});
});
app.listen(9080,function(){
console.log('Server running at http://127.0.0.1:9080/');
});
Angular客户:
var app = angular.module('myApp',[]);
app.controller('myCtrl',function($scope,$http){
$scope.check = function(data){
var id = data.form.id;
var pwd = data.form.password;
console.log("utente è "+id+",password è "+pwd);
var msg = {username: id,password: pwd};
$http({
url:'http://localhost:9080/login', //senza niente qui,metti * in app.post()
method:"POST",
data: $.param(msg),
responseType: "application/json",
headers: {'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}})
.then(function(response){
console.log("Server response "+response.data);
});
};
});
我认为“response.data”应该给我json文件,而它返回我[Object,Object]。我怎么了?
答案 0 :(得分:1)
你快到了!
只需将日志语句中的+
更改为,
。
console.log("Server response ", response.data);
+
运算符将尝试将对象连接到字符串,该对象不是字符串,因此它调用toString()
函数,该函数向您显示[Object,Object]
,这意味着您有一个包含对象的对象。
使用逗号时,它会检查对象。
来自toString()文档:
每个对象都有一个自动调用的toString()方法 该对象将表示为文本值或对象是 以预期字符串的方式引用。默认情况下 toString()方法由来自Object的每个对象继承。 如果在自定义对象中未覆盖此方法,则toString() 返回“[object type]”,其中type是对象类型。下列 代码说明了这一点: