我正在尝试使用express next('route')
,但我在文档中没有找到关于如何执行此操作的内容,提到here。但它没有解释如何做
仅适用于使用app.METHOD()或router.METHOD()函数加载的中间件函数。
我没有得到他们的意思,因为我之前从未使用过app.METHOD()
,而且无法找到有关如何使用next('route')
正确执行此操作的文档。这会有用吗?
app.method('*', (req, res, next) => {
if(req.user == null) {
next();
} else {
User.findOne({"_id": req.user.id}, function(err, result) {
if(err){
console.log(err);
} else {
if(stripe.active == false && stripe.trial == false){
res.render('/dashboard/billing');
next('route');
} else {
next();
}
}
});
}
});
这甚至会起作用吗?我在某处猜测我搞砸了什么。如果我这样做,那么它会找到一个用户,然后检查is_active
和is_trial
都是假的,如果是,则跳到下一个路线。我这样做的想法是,如果网站的任何部分没有登录用户,那么当有登录用户并且两者都是假时,我只允许他们转到/dashboard/billing
。这是向我建议的一种方法,可以防止尚未支付试用的用户访问我的应用程序。
路线我正在测试:
// dashboard
app.get('/dashboard',
setRender('dashboard/index'),
setRedirect({auth: '/login'}),
isAuthenticated,
(req, res, next) => {
},
dashboard.getDefault);
答案 0 :(得分:2)
首先,将方法更改为正确的HTTP方法请求。在文档中,它指定.METHOD()表示的内容:
app.METHOD()函数,其中METHOD是请求的HTTP方法 中间件函数处理(例如GET,PUT或POST) 小写。
换句话说,.METHOD()是.get,。post,.put等的占位符。
尝试在您的应用中更改它:
app.get('*', (req, res, next) => {
if(req.user == null) {
next();
} else {
User.findOne({"_id": req.user.id}, function(err, result) {
if(err){
console.log(err);
} else {
if(stripe.active == false && stripe.trial == false){
res.render('/dashboard/billing');
next('route');
} else {
next();
}
}
});
}
});
看看你是否可以从那里开始。
<强>更新强>
在res.render()之后立即调用.next('route')取消res.render(),因为.next('route')会将请求发送到下一个路由器。