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

程序化加载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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:25:35