如何在 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) => ..
如果您使用的是 promises
或
const 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 中创建一个表以使用 Node JS 存储在 Postgresql 中