有什么方法可以查看当前中间件.即之后是否有一个函数。
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在next()处理程序中那样定义路由器的堆栈?
例子
var layer = stack[idx++];
如果有下一个函数存在的话,这个函数就会抓取,但是我不能从我的函数中访问这个作用域,有什么方法可以让我自己定义这些层。
这似乎是非常有用的,可以防止多余的代码。
感谢Paul,我能够解决下一个问题,目前这个工作。
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));
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};
}
});
}
希望对你有帮助。
谢谢你的帮助