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
相关产品推荐
相关产品推荐

