Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sails.js “究竟是什么?”;“数据”;这是传递给响应的吗?_Sails.js - Fatal编程技术网

Sails.js “究竟是什么?”;“数据”;这是传递给响应的吗?

Sails.js “究竟是什么?”;“数据”;这是传递给响应的吗?,sails.js,Sails.js,我正在编写一个将数据作为输入的自定义响应,我发现添加了奇怪的属性,即: add: [Function: add], remove: [Function: remove] 当我注销一些示例数据时,我得到: [ { books: [ { id: 1, title: 'A Game of Thrones', createdAt: '2015-08-04T04:53:38.043Z', updatedAt: '2015-08-04T04

我正在编写一个将
数据
作为输入的自定义响应,我发现添加了奇怪的属性,即:

add: [Function: add],
remove: [Function: remove]
当我注销一些示例
数据时,我得到:

[ { books: 
     [ { id: 1,
         title: 'A Game of Thrones',
         createdAt: '2015-08-04T04:53:38.043Z',
         updatedAt: '2015-08-04T04:53:38.080Z',
         author: 1 } ],
    id: 1,
    name: 'George R. R. Martin',
    createdAt: '2015-08-04T04:53:38.040Z',
    updatedAt: '2015-08-04T04:53:38.073Z' },
  { books: 
     [ { id: 2,
         title: 'Ender\'s Game',
         createdAt: '2015-08-04T04:53:38.043Z',
         updatedAt: '2015-08-04T04:53:38.080Z',
         author: 2 },
       { id: 3,
         title: 'Speaker for the Dead',
         createdAt: '2015-08-04T04:53:38.043Z',
         updatedAt: '2015-08-04T04:53:38.081Z',
         author: 2 } ],
    id: 2,
    name: 'Orson Scott Card',
    createdAt: '2015-08-04T04:53:38.042Z',
    updatedAt: '2015-08-04T04:53:38.074Z' } ]
这看起来很简单,但当我在上面使用自定义序列化程序时,会产生奇怪的
add
remove
函数。如果我将这些数据直接硬编码到序列化程序中,这些数据就不存在了。显然,
数据
中隐藏着一些东西,而这些东西没有被打印到控制台上

那么,什么是数据

编辑:所以,我仍然不太确定这里还有什么其他的魔法属性,但是:

Object.keys(data[0].books))
揭示

[ '0', 'add', 'remove' ]
这就是它们的来源。为什么会在传递给自定义响应的数据中包含此内容?还有什么可能藏在里面

更重要的是,我如何去掉这个黏液并使
data
成为一个普通对象

JSON.parse(JSON.stringify(data));

这很好地清理了它,尽管它感觉像一个黑客。(事实上,这绝对是一个黑客行为。)

我假设您的
数据
属性是通过数据库查询返回的。e、 g:

Model.find(...).exec(function (err, data) { ... });
但是这些
.add()
.remove()
方法是什么

以下是您可以找到的内容:

在大多数情况下,记录只是普通的旧JavaScript对象(又名POJO)。但是,它们确实有一些受保护(不可枚举)的方法用于格式化包装的数据,还有一个特殊的方法(
.save()
)用于将编程更改持久化到数据库

orders[1].buyers.add({ name: 'Jon Snow' });
orders[1].save(function (err) { ... });
我们可以:

另一方面,“集合”关联确实有两种特殊(不可枚举)方法用于关联和解除关联链接记录。但是,仍必须对原始记录调用
.save()
,才能将更改持久化到数据库中

orders[1].buyers.add({ name: 'Jon Snow' });
orders[1].save(function (err) { ... });
因此,如果您使用“集合”关联,这些方法(
.add()
.remove()
.save()
)非常有用

如何移除它们

您将需要使用它来返回一个从所有实例方法中剥离的克隆模型实例


您可能希望使用它还返回克隆的模型实例。但是,这一个包含所有实例方法。

我没有显式调用
Model.find()
,我也不确定
数据是如何构造的。它不完全是水线对象,因为
.toObject()
.toJSON()
在它上面没有定义。它被传递到响应函数中,如中所示:它必须是调用它时给
res.custom()
的第一个参数(它不是在任何地方构造的)。你在用蓝图行动吗?我没有用蓝图做任何事。这是一个可以安装到任何sails应用程序中的钩子。我刚刚发布于: