理解Sequelize(返回与附加)中的钩子

时间:2017-10-22 15:21:53

标签: express sequelize.js

我正在关注如何将SequelizeExpress进行整合的学校研讨会。有一节我们正在学习如何在我们的模型中使用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));
        }
      },
    },
  }
);

有人可以解释一下吗?钩子里的函数怎么能不返回什么东西?上面的工作,所以钩子/函数返回一些东西。

提前致谢!

1 个答案:

答案 0 :(得分:1)

挂钩只是在记录实例的某些生命周期点运行的代码。你可以让它们成为纯粹的副作用。在你的情况下,你需要做的就是修改钩子传递的页面对象,返回没有帮助或伤害。

然而,钩子的返回值并非无用。如果你需要在钩子内做任何异步,你必须返回一个承诺。