我想创建一个从数据库中检索一些信息的模块。由于我在大多数路线中都需要代码,因此我认为模块非常适合它。
基本上我的模块查询数据库并将结果推送到数组中。问题是我无法访问路由页面中的数组。
是否可以或应该将数组存储到session或某个res.local变量中,或者我是否对module.exports函数做错了?
以下是模块代码的一部分:
function myModule(req, res, next){
if(req.session.userid){
var result = [];
//query the db etc...
return result;
}else{
return next();
}
}
module.exports = myModule;
我的路线:
var myModule= require('./middleware/mymodule');
module.exports = function(app){
app.get('something', function(req, res){
console.log(myModule);
});
};
console.log(myModule)返回[Function: myModule]
。
使用app.get('something', myModule, function(req, res){
有什么区别,发送自定义回复只有 吗?
感谢您的帮助
答案 0 :(得分:1)
您正在尝试使用错误的中间件。 您可以采取的一种方法是创建将结果添加到请求对象的中间件。
<强> myMiddleware.js 强>
function myMiddleware(req, res, next) {
var result = [];
if(req.session.userid) {
//query the db etc
}
req.myResult = result; // May be empty if no req.session.userid
return next();
}
module.exports = myMiddleware;
<强> route.js 强>
var myMiddleware = require('./middleware/myMiddleware');
module.exports = function(app) {
app.get('something', myMiddleware /* Use myMiddleware */, function(req, res) {
console.log(req.myResult); // The result is part of the request object
return res.send('Hello world');
}
}
使用时:
app.get('something', myMiddleware, function(req, res) {
您说首先调用myMiddleware,然后next();
正在调用您的路由函数,同时传递更改的req
对象和res
对象。