程序化加载Sails后无法调用模型findOne等方法求助
解决Sails程序化加载后模型无查询方法的问题
你遇到的问题是因为程序化加载Sails时,直接访问sails.models拿到的只是模型的原始定义对象,并没有初始化Waterline ORM提供的查询方法(比如findOne、update)。
下面是两种可行的解决办法:
方法一:使用sails.getModel()获取实例化后的模型
替换直接访问sails.models.user的方式,改用Sails提供的getModel方法获取具备ORM操作能力的模型实例:
const Sails = require('sails').constructor; const sails = new Sails(); await sails.load(); // 改用getModel获取模型实例 const User = sails.getModel('user'); const user = await User.findOne({id:1});
方法二:确保加载时传入完整的ORM配置
如果必须直接用sails.models,可以在sails.load()时传入包含ORM配置的参数,确保Waterline正确初始化模型:
const Sails = require('sails').constructor; const sails = new Sails(); await sails.load({ hooks: { // 确保ORM钩子启用 orm: require('sails-hook-orm') }, models: { // 指定你的模型目录路径,比如项目根目录下的api/models dir: require('path').resolve(__dirname, './api/models'), // 启用ORM enabled: true } }); const user = await sails.models.user.findOne({id:1});
额外注意点
- 模型文件名要符合Sails规范:比如模型文件名为
User.js,对应sails.models.user(全小写),大小写不匹配会导致无法正确识别。 - 确保项目中已经安装
sails-hook-orm依赖(大多数Sails项目默认已安装)。
内容的提问来源于stack exchange,提问作者GGGforce
相关产品推荐
相关产品推荐

