如何在 Sequelize 中的导入模型中创建自定义方法或函数

Posted

技术标签:

【中文标题】如何在 Sequelize 中的导入模型中创建自定义方法或函数【英文标题】:How to create custom methods or functions inside imported models in Sequelize 【发布时间】:2018-05-11 10:59:26 【问题描述】:

我完全是Node.js 的新手。这是我在 node.js 中的第一个项目。由于我在大多数项目中都使用 Laravel,因此我熟悉 MVC(模型视图控制器)。所以我浏览了关于模型的Sequelize ORM 文档。我学会了如何为每个文件导入一个 model 并且它可以工作,但是当我将 自定义函数 添加到 User 模型时,该函数可以正常工作,但不会返回任何内容。

这是我的数据库文件

const fs = require('fs');
var Sequelize = require('sequelize');
var sequelize = new Sequelize('database_name', 'userName', 'password', 
  host: 'localhost',
  dialect: 'mysql',
  operatorsAliases: false,
  logging:false,

  pool: 
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  ,

  // SQLite only
  //storage: 'path/to/database.sqlite'
);



sequelize.import('./../models/User.js');
var db=sequelize.models;



   module.exports=db,connectionCheck;

这是用户模型的代码

module.exports = (sequelize, DataTypes) => 
  var User = sequelize.define('User', ,
         timestamps: false,
        freezeTableName:true,
        tableName:'agent_info'
      );
/*This is the custom function that I added*/
      User.test = function()
         User.findOne().then(data =>
           console.log(data);
           return data;
        );
      ;


  return User;
;

最后是路由文件的代码

 app.get('/',(req,res,next) =>
      var temp=db.User.test();
      console.log(temp);
    );

我在这里调用user.test() 函数(自定义模型函数) 该函数似乎按预期工作,但没有返回任何内容。那么我做错了什么,还是在 Sequelize 中不可能? 提前致谢

【问题讨论】:

【参考方案1】:

test 函数不返回任何内容的原因是 findOne 是异步的,并且返回会在 findOne 完成之前发生。

您所要做的就是返回User.findOne(),这反过来又会返回一个承诺。像这样的

User.test = () => User.findOne().then((data) => 
    console.log(data);
    return data;
  );

现在你可以使用 User.test().then((result) => .. 如果您使用的是 promisesconst result = await User.test(); 如果你想使用async/await

PS:这里的test 函数是class method

【讨论】:

谢谢,它工作了,但数据也返回了一个承诺,所以我使用了另一个然后在路由文件中调用 乐于助人。然后您可以返回User.test = () => User.findOne()。和console.log(data)then 中。不需要两个.then 你能澄清一下如何使用 await 和 async 有很多类似this和this的文章

以上是关于如何在 Sequelize 中的导入模型中创建自定义方法或函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 Typescript 在 Sequelize 模型中创建实例方法

如何在 SEQUELIZE (nodeJS) 中创建触发器?

如何扩展 Sequelize 模型?

如何在 Sequelize 中创建一个表以使用 Node JS 存储在 Postgresql 中

如何在 Sequelize 中类型为 TIME 的列中创建位置?

如何在 Firebase 中创建基于角色的访问控制或自定义声明