【问题标题】:How to create custom methods or functions inside imported models in Sequelize如何在 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 中不可能? 提前致谢

【问题讨论】:

    标签: javascript node.js orm sequelize.js


    【解决方案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
    • 有很多类似thisthis的文章
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多