You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:55:16