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

标签 node.js sails.js

首先,上下文。我正在使用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/

相关文章:

javascript - 计算 grunt 观看的文件数

javascript - 为什么计数增加,关闭问题

javascript - SailsJS 自定义 API Hook - 子域

javascript - Sails.js 文件上传 - 在上传实际完成之前销毁执行的 req.body 和 .upload() 回调

javascript - 如何获取通过 sails.js 中的表单发送的数组/对象(使用 enctype multipart/form-data)

reactjs - POST sails 服务器 api 并 react 客户端 500(内部服务器错误)

javascript - Node js 捕获键盘按下和鼠标移动(不在 Web 浏览器上)

javascript - 使用nodeJS添加数字时出现奇怪的错误

node.js - 如何在我的 mongoose 集合中插入自动递增数字

nginx - Sails.js + Nginx 代理后面的通行证