我一直在与NodeJS,ExpressJS和AngularJS合作。
我目前正在制作一个图形绘图项目,要求所有处理都在后端完成,因此前端只显示结果。这需要我将包含数据和函数原型的一些对象路由到前端。到目前为止,我还没有在最后一部分运气好。当我从前端调用$http.get
,并且我的路由以res.send(object)
响应时,在节点后端的console.log
中,对象将打印出完整的原型函数,但在我的浏览器中在前端,检索到的对象仅打印数据/文本部分,并完全丢弃所有功能。
请参阅下面的代码段以获取要点:
sample backend ExpressJS routes code snippet
// let's create an object,
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
// a function prototype
this.fooBar = function(){
return 'Yes';
}
};
// open up a route
app.get('/getObject', function(req, res){
var baby = new Person("John", "Doe");
console.log(baby)
//this console logs the following, as expected:
// Person { firstName: 'John', lastName: 'Doe', fooBar: [Function] }
// respond with the entire object
res.send(baby)
});
sample front end AngularJS code snippet
$http.get('/getObject')
.success(function(data){
console.log(data)
// THIS, however, only console logs the data, and discards the function
// Object {firstName: "John", lastName: "Doe"}
})
.error(function(err){
console.log(err)
});
让我挠头,试图弄清楚问题是来自Express / Node,还是来自Angular的结尾,或者两者兼而有之?我很欣赏这方面的一些帮助,因为我真的很想把整个对象(包括原型函数)传递到前端,用于一些最小的操作。如果这是不可能的,至少指出一个合适的解决方法:-)。谢谢!
答案 0 :(得分:2)
函数不可序列化。因此,它们将被跳过,而不会通过HTTP调用发送。
来自MDN's docs for JSON.stringify()
:
如果在转换过程中遇到
undefined
,函数或符号,则会省略(当在对象中找到它时)或者删除为null(当在数组中找到它时)。JSON.stringify
也可以在传入" pure"时返回undefined。JSON.stringify(function(){})
或JSON.stringify(undefined)
等值。
相反,只传输数据并在客户端中重新水化JS对象。