KeystoneJS:callHook挂钩定义在哪里?

时间:2016-07-11 17:25:53

标签: keystonejs

我想在pre:signin和post:signin hooks中添加逻辑,但无法找到它们的定义位置。在admin / server / api / session / signin.js中,我找到了两者的callHook(),但无法找到实际的钩子。非常感谢!

2 个答案:

答案 0 :(得分:0)

KeystoneJS正在使用grappling-hook。这就是为什么你可以使用callHook。

在node_modules / keystone / index.js中,您可以看到此代码

var grappling = require('grappling-hook');

grappling.mixin(this).allowHooks('pre:static', 'pre:bodyparser', 'pre:session', 'pre:routes', 'pre:render', 'updates', 'signout', 'signin', 'pre:logger');

我不确定但你找不到实际的钩子因为它们确实不存在

这些方法在keystone和grapple中定义,只是让它们变得可以晃动。例如 signin是在keystone实例中定义的方法,而grapple使它成为可锁定的。 以下是签署完成后您将告诉您该做什么的方式。

 keystone.callHook(user, 'post:signin', function (err) {
      if (err) return res.json({ error: 'post:signin error', detail: err });
      res.json({ success: true, user: user });
 });

所以在外行术语中你说的是干草基石,在这个用户登录后调用我的函数。为此,在keystone中确实没有代码。

我的知识在这里仅限于用户如何通过以及只有在此用户登录时才会发生这种情况。我认为,我们仍需要一些专家。

答案 1 :(得分:0)

我有一个用例,每次将特定模型添加到数据库时都需要调用一个函数。我发现你可以使用Mongoose middleware特别是post中间件来实现这样的结果。所以在我的情况下,我有一个Product模式,我想在每次添加或更新新产品时运行一个函数。这就像添加以下内容一样简单:

keystone.lists.Product.schema.post('save',function(){
console.log('called after new item saved');});