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应用程序中的钩子。我刚刚发布于: