有没有办法查看当前中间件之后是否有函数。 即
router.get('/', function(req, res, next){
if(next){//always returns true
}
});
我有一个功能来获取信息,并根据信息将在表格或表格中显示的路线,或者它将与其他数据结合。
我想要一个类似于
的功能function findAll(req, res, next){
db.findAll(function(err, docs){
if(next){
req.list = docs
return next();
}else{
res.render('table', {list:docs};
}
});
}
这样我可以在
中使用相同的功能router.get('/', findAll, handleData);
或
router.get('/', findAll);
并且在任何一种情况下都会发送回复。有没有办法我可以像下一个()处理程序
中的express那样为路由器定义堆栈例如
var layer = stack[idx++];
这会捕获下一个函数,如果它存在但我无法从我的函数访问此作用域。有没有办法可以自己定义图层。
这似乎对防止冗余代码非常有用
答案 0 :(得分:3)
感谢保罗,我能够解决下一个问题。 目前这个工作
function findAll(callback){
return function send(req, res){
db.findAll(function(err, docs){
if(callback){
req.docs = docs
return callback(req, res, next());
}
res.render('table', {docs:docs});
});
}
}
function handleData(req, res, next){
res.send(req.docs);
}
将与
一起使用router.get('/', findAll());
或
router.get('/', findAll(handleData));
答案 1 :(得分:0)
Snymax 您可以检入功能是否定义了next。 如果已定义,则可以调用next和 如果没有做你想要的。
为我工作。
function findAll(req, res, next){
db.findAll(function(err, docs){
if(typeof next != "undefined"){
req.list = docs
return next();
}else{
res.render('table', {list:docs};
}
});
}
我希望这会有所帮助。
谢谢