我正在关注如何将Sequelize
与Express
进行整合的学校研讨会。有一节我们正在学习如何在我们的模型中使用hooks
- 其中我对此感到困惑:
返回与附加
一个钩子与一个Page实例一起运行 保存作为参数。因此,我们希望附加一个创建的 urlTitle到这个页面实例而不是从它返回它 功能
var Sequelize = require('sequelize');
var db = new Sequelize('postgres://localhost:5432/__wikistack__', {
logging: false,
});
const Page = db.define(
'page',
{
title: {
type: Sequelize.STRING,
},
urlTitle: {
type: Sequelize.STRING,
},
content: {
type: Sequelize.TEXT,
},
status: {
type: Sequelize.ENUM('open', 'closed'),
},
},
{
hooks: {
beforeValidate: function(page) {
if (page.title) {
// Removes all non-alphanumeric characters from title
// And make whitespace underscore
return (page.urlTitle = page.title.replace(/\s/g, '_').replace(/\W/g, ''));
} else {
// Generates random 5 letter string
return (urlTitle = Math.random()
.toString(36)
.substring(2, 7));
}
},
},
}
);
有人可以解释一下吗?钩子里的函数怎么能不返回什么东西?上面的工作,所以钩子/函数返回一些东西。
提前致谢!
答案 0 :(得分:1)
挂钩只是在记录实例的某些生命周期点运行的代码。你可以让它们成为纯粹的副作用。在你的情况下,你需要做的就是修改钩子传递的页面对象,返回没有帮助或伤害。
然而,钩子的返回值并非无用。如果你需要在钩子内做任何异步,你必须返回一个承诺。