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

Sails REST API与MySQL报错:TypeError: Model.create(...).meta不是函数

嘿,我之前在Sails.js项目里碰到过几乎一模一样的问题,咱们一步步来拆解这个TypeError: Model.create(...).meta is not a function的报错:

1. 先排查Sails与Waterline的版本兼容性

.meta()是Sails底层ORM框架Waterline提供的方法,最常见的触发原因就是版本不匹配:

  • 先在项目根目录运行npm list sails waterline,查看当前安装的两个包版本
  • 对照Sails官方的版本兼容要求:比如Sails v1.x需要搭配Waterline v0.13.x,Sails v0.12则对应Waterline v0.12.x。如果版本错配,就会出现“方法明明存在却调用失败”的诡异情况。

2. 检查Model.create的调用写法

不同Sails版本对.meta()的支持逻辑不一样,尤其是async/await和链式调用的混用:

  • 如果你用的是Sails v0.12及更早版本,.meta()需要和回调函数配合使用,不能直接跟在await后面:
    // 正确写法
    User.create(userData).meta({fetch: true}, (err, createdUser) => {
      // 处理业务逻辑
    });
    
  • 如果你用的是Sails v1+版本,.meta({fetch: true})已经被简化成.fetch()方法了,旧写法会直接报错:
    // 正确写法
    const createdUser = await User.create(userData).fetch();
    

3. 排查自定义代码对Model的干扰

既然sails lift能正常建库建表、API也能访问,说明核心功能没问题,大概率是局部代码破坏了Waterline的链式调用:

  • 检查api/hooks目录下的自定义钩子,有没有修改Model的查询方法逻辑
  • 看看项目里有没有全局BaseModel(比如api/models/BaseModel.js),是否重写了create方法,导致返回的不是标准的Waterline Query对象

4. 清理依赖重新安装

有时候node_modules里的依赖会出现缓存损坏或版本冲突,试试这几步:

# 删除依赖目录和锁文件
rm -rf node_modules
rm package-lock.json
# 重新安装依赖
npm install
# 带日志重启Sails,观察有没有依赖警告
sails lift --verbose

另外,你可以先定位到具体是哪个Model的create操作抛出的错误,针对性检查那段代码,会比全局排查高效很多。

内容的提问来源于stack exchange,提问作者Logiquol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:22:38