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

时间:2018-05-11 10:59:26

标签: node.js sequelize.js

我完全是Node.js的新手。这是我在节点中的第一个项目。由于我在大多数项目中都使用Laravel,因此我熟悉MVC(模型视图控制器)。所以我浏览了关于模型的Sequelize文档。我学会了如何为每个文件导入一个模型并且它有效但是当我向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 个答案:

答案 0 :(得分:2)

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

您所要做的就是返回User.findOne(),而User.test = () => User.findOne().then((data) => { console.log(data); return data; }); 将返回一个承诺。像这样的东西

User.test().then((result) => { .. }

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

PS:这里的class method功能是$Interest