Sails.js 从javascript对象构造水线模型对象

Sails.js 从javascript对象构造水线模型对象,sails.js,waterline,sails-mongo,Sails.js,Waterline,Sails Mongo,为了减轻MongoDB服务器上的负载,我想在Redis中缓存Waterline中的一些对象。为了实现这一点,我必须将对象序列化为JSON 我的问题是,如何通过数据类型处理、成员函数等将JSON构造回Waterline模型的实例,使其对消费代码透明 每当我运行本机MongoDB查询时,我也希望这样做,给我提供具有本机ObjectID的对象、不匹配的日期类型等 User.findOne(id, function (err, user) { // to string and back again

为了减轻MongoDB服务器上的负载,我想在Redis中缓存Waterline中的一些对象。为了实现这一点,我必须将对象序列化为JSON

我的问题是,如何通过数据类型处理、成员函数等将JSON构造回Waterline模型的实例,使其对消费代码透明

每当我运行本机MongoDB查询时,我也希望这样做,给我提供具有本机ObjectID的对象、不匹配的日期类型等

User.findOne(id, function (err, user) {
   // to string and back again, could be stored in cache in the meantime
   var object = JSON.parse(JSON.stringify(user));

   var user = new User(object); //doesn't work
   var user = User.toObject(object); // doesn't work
}

您希望使用哪种类型的
缓存

var object=JSON.parse(JSON.stringify(user))不会存储所有信息。JSON不同于JavaScript对象。哪个
user
是JavaScript对象,由Sails的水线引擎创建。它有类似于
save
的方法,但当您将其转换为JSON时,该方法将消失

var user=新用户(对象)
var user=user.toObject(对象)
不起作用,因为
User
不是构造函数,它只是
sails.models.User
的简写,代表
/api/models/User.js处的
用户
模型

如果要快速查询,必须将
数据
存储在Redis中,然后再从中检索

也就是说,您应该手动将
用户
插入到您的redis,然后在以后检索它,从而将其从主数据库保存到您的redis。但您的所有主要数据库模型特征都将消失,除非您将主要数据库模型(
User
在本例中)复制到您的redis
User
模型(或您命名的任何模型)。

根据

var user=新用户。\u模型(对象);

请注意插入的值。新对象应该与字符串化之前的对象完全匹配。

为了便于说明,只需将JSON往返放在那里即可。在实际项目中,序列化和反序列化将被时间抵消,字符串将存储在Redis或内存中。太好了。我会检查这是否有效。整个下划线看起来有点不稳定,但如果我封装它并编写一些回归测试,我可以在生产中使用它。