使用app.use在sails.js中设置一些路线

首先,上下文。 我正在使用议程安排我的sails.js应用程序中的任务。 议程开始在一个钩子,后奥尔姆和其他钩完成。 到目前为止,一切都很好。 然后我发现了一个日程表 ,一个pipe理议程任务的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)); 

而且我找不到应该把这个放在哪里。 正如我所说,议程是在一个钩子初始化,然后我把它保存为sails.agenda 。 所以我唯一需要做的就是

 app.use('/agendash', require('agendash')(sails.agenda)) 

但是我不确定如何在routes.js之外添加一个像这样的新路由(我不能在这个文件中引用routes.js ,它是未定义的),然后用一些策略来保护这个路由(我想让agendash可用只有pipe​​理员)。 如果我把它正确的话,这行应该只运行一次,所以我不能把它作为中间件config.http 。 但是否则sails.js的路由器将覆盖路由(至less如果我把sails.hooks.http.app.use('/agendash', require('agendash')(agenda))在一个钩子,路由是没有暴露)。

那么我该怎么做才能使它工作?

首先,你不应该在一个钩子中启动议程,而是在启动时执行一次的config/bootstrap.js 。 然后创build一个名为config/myApp.js的文件,在其中放置全局variables:

 /** * Expose global variables. */ module.exports.myApp = { agenda: null }; 

config/bootstrap.js你设置了这个variables一次:

 var Agenda = require('agenda'); sails.config.myApp.agenda = new Agenda({mongo: 'mongodb://127.0.0.1/agendaDb'}); 

现在您可以参考议程,并且可以使用sails.config.myApp.agenda从应用程序的任何地方访问。

要注册日程安排路线,您必须使用自定义middelware这里解释如何使用自定义路由中间件与Sails.js? (ExpressJS),并在这里讨论https://github.com/balderdashy/sails/issues/814

好的,我通过在config/http.js中使用customMiddleware来find解决scheme,我可以使用app.use ,通过中间件保护路由并最终调用Agendash(agenda)(req, res, next) 。 为了这个工作,我不得不将议程初始化从钩子中移出,并将其放入customMiddleware 。 这是我的代码看起来像:

  customMiddleware: function(app){ var Agenda = require("agenda"); var Agendash = require('agendash') var agenda = new Agenda({db: {address: 'localhost:27017/dbName', collection: 'collectionName'}}); //protect the route with several policies app.use('/agendash', function(req, res, next){ require('../api/policies/policy1')(req, res, function(){ require('../api/policies/policy2')(req, res, function(){ require('../api/policies/policy3')(req, res, function(){ Agendash(agenda)(req, res, next) } ) }) }) }); sails.agenda = agenda; //saving the reference agenda.on('ready', function(){ var eventsToWaitFor = ['hook:orm:loaded', 'hook:email:loaded'];//if need to wait for some events before starting tasks sails.after(eventsToWaitFor, function(){ require('./../api/services/jobs')(agenda);//loading all the jobs agenda.on('fail', function(err, job){ //log error here }); agenda.every('10 minutes', 'task1');//schedule tasks agenda.every('10 minutes', 'task2'); agenda.start();//start agenda }); }) }