传递/路由包含函数原型的对象

时间:2016-07-15 00:00:39

标签: javascript angularjs node.js express

我一直在与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的结尾,或者两者兼而有之?我很欣赏这方面的一些帮助,因为我真的很想把整个对象(包括原型函数)传递到前端,用于一些最小的操作。如果这是不可能的,至少指出一个合适的解决方法:-)。谢谢!

1 个答案:

答案 0 :(得分:2)

函数不可序列化。因此,它们将被跳过,而不会通过HTTP调用发送。

来自MDN's docs for JSON.stringify()

  

如果在转换过程中遇到undefined,函数或符号,则会省略(当在对象中找到它时)或者删除为null(当在数组中找到它时)。 JSON.stringify也可以在传入" pure"时返回undefined。 JSON.stringify(function(){})JSON.stringify(undefined)等值。

相反,只传输数据并在客户端中重新水化JS对象。