在express中使用csurf,如果验证错误如何获取异常?
发布于 11 年前 作者 friskit-china 6638 次预览 最后一次回复是 11 年前 来自
代码如下:
app.use(csrf());
app.post('/post', function(req, res){
res.send(req.body.test).end();
})
app.get('/', function(req, res){
console.log(req.csrfToken());
res.send('<form method="post" action="/post"><input type="text" name="test"><input type="submit"><input type="hidden" name="_csrf" value="'+req.csrfToken()+'"> </form>');
});
如果表单中不包括_csrf会导致node中一个异常。我想当异常触发则转发到一个错误页面,而不是将异常输出出来。。这个怎么搞?
6 回复
求救啊哭。。。
@friskit-china
看csrf中间件源代码中的
verifytoken()函数,当校验失败时,会丢出一个Error对象:所以,你要在主程序中加上一个处理
Error的中间件:总结:看项目的文档和源代码,是解决问题的重要手段。
@bnuhero 看了源码已经解决了……之前翻文档翻不到,发现API reference里头没写,结果后来在guide中找到了……
@bnuhero 搭车再问一下。。。为啥错误处理中间件就要next(err, req, res)而其他的中间件直接next()就行?
@friskit-china 这个是约定
@friskit-china
WARNING: TO BE CONFIRMED
next()- 把控制权传递给下一个可用的中间件,继续处理next(err)- 传递控制权给下一个可用的处理错误的中间件,继续处理翻翻Express的源代码,应该有发现。