Sails 1.0中create回调返回结果为undefined的问题求助
解决Sails 1.0中create回调result为undefined的问题
哈哈,这个坑我当初用Sails 1.0的时候也踩过!明明数据库里已经成功插入了记录,但then回调里的result就是undefined,简直让人摸不着头脑。
核心原因
Sails 1.0和之前的版本有个关键区别:Model.create()方法默认不会返回创建后的记录,必须显式调用.fetch()链式方法,才能拿到刚插入的数据。这是框架在性能优化上的调整,默认不返回结果可以减少数据库查询开销,但也容易让习惯旧版本的开发者踩坑。
快速解决方案
在你的Event.create(dat)后面加上.fetch()即可,修改后的代码如下:
add: function (req, res) { const params = req.allParams(); const { event_id, name, date, } = params; const dat = { name:name, id:Number(event_id), date_start:new Date(Number(date)), }; console.log(dat); console.log(typeof dat.location); Event.create(dat) .fetch() // 新增这一行,获取创建后的记录 .then(function (result){ console.log(result) // 现在就能正常拿到插入的记录了 return res.ok(); }) .catch(function (err){ console.log(err); return res.send(err); }); }
全局配置优化(可选)
如果你希望所有模型的create操作默认都返回记录,可以修改config/models.js文件,添加或修改以下配置:
module.exports.models = { // 其他配置... fetchRecordsOnCreate: true, // 开启后,所有create默认返回记录 };
这样就不用每次调用create都手动加.fetch()了。
其他排查点(可能性较低)
如果加了.fetch()还是没结果,可以检查这两个地方:
- 模型的
attributes定义是否和你传入的dat字段完全匹配?比如有没有拼写错误(比如模型里是dateStart但你传的是date_start,不过你说记录已插入,这个概率不大)。 - 模型的生命周期钩子(比如
beforeCreate)是否有修改或拦截返回值?比如钩子函数里没有正确返回values。
内容的提问来源于stack exchange,提问作者paul23
相关产品推荐
相关产品推荐

