首先,上下文。我正在使用agenda在我的 sails.js 应用程序中安排任务。在 orm 和其他一些钩子(Hook)完成之后,议程从一个钩子(Hook)开始。到目前为止一切都很好。然后我发现agendash ,一个用于管理议程任务的 Web 界面。而且我没能让它与 sails.js 一起工作。
问题出在下面。这是议程应该如何使用(来自文档):
var express = require('express');
var app = express();
// ... your other express middleware like body-parser
var Agenda = require('agenda');
var Agendash = require('agendash');
var agenda = new Agenda({mongo: 'mongodb://127.0.0.1/agendaDb'});
app.use('/agendash', Agendash(agenda));
我找不到应该把它放在哪里。正如我所说,议程是在钩子(Hook)中初始化的,然后我将其保存为 sails.agenda
。所以我唯一要做的就是
app.use('/agendash', require('agendash')(sails.agenda))
但我不确定如何在 routes.js
之外添加这样的新路线(我无法在该文件中引用sails
,它是未定义的),然后使用一些策略保护此路由(我希望议程仅可供管理员使用)。
如果我做对了,这条线应该只运行一次,所以我不能把它放在 config.http
中作为中间件。但否则 sails.js 的路由器会覆盖该路由(至少如果我将 sails.hooks.http.app.use('/agendash', require('agendash')(agenda))
放在钩子(Hook)中,该路由不会暴露)。
那么我应该怎么做才能让它发挥作用呢?
最佳答案
首先,您不应该在钩子(Hook)中初始化议程,而应该在 config/bootstrap.js
中初始化议程,该议程在启动时执行一次。然后创建一个名为 config/myApp.js 的文件,在其中放置全局变量:
/**
* Expose global variables.
*/
module.exports.myApp = {
agenda: null
};
在config/bootstrap.js
中,您设置此变量一次:
var Agenda = require('agenda');
sails.config.myApp.agenda = new Agenda({mongo: 'mongodb://127.0.0.1/agendaDb'});
现在您有了对议程的引用,并且可以使用 sails.config.myApp.agenda
从应用中的任何位置进行访问。
要注册议程路由,您必须使用自定义中间件,如此处所述 How to use custom route middleware with Sails.js? (ExpressJS)并在这里讨论https://github.com/balderdashy/sails/issues/814
关于node.js - 使用app.use在sails.js中设置一些路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39228927/