我正在尝试了解JWT以及它们如何与Node和Express .js一起使用。我有这个中间件尝试使用令牌验证用户:
app.use(function(req, res, next) {
if(req.headers.cookie) {
var autenticazione = req.headers.cookie.toString().substring(10)
autenticazione = autenticazione.substring(0, autenticazione.length - 3)
console.log(autenticazione)
jwt.verify(autenticazione, app.get('superSegreto'), function(err) {
if (err) {
res.send('authentication failed!')
} else {
// if authentication works!
next() } })
} else {
console.log('errore')} })
这是我受保护网址的代码:
app.get('/miao', function (req, res) {
res.sendFile(__dirname + '/pubblica/inserisciutente.html')
res.end() })
即使路径是正确的(我甚至尝试使用path.join(__ dirname +'/ pubblica /inserisciutente.html)并得到相同的结果),访问网址时我只得到一个空白页面(甚至节点conde)我也设置:app.use(express.static('/ pubblica'))PS如果我尝试用res.send('Some stuff')替换res.sendFile(..),我可以在页面上正确查看它。我做错了什么?
答案 0 :(得分:6)
res.sendFile()
是异步的,如果成功,它将结束自己的响应。
因此,当您在启动res.end()
后立即致电res.sendFile()
时,您将在代码实际发送文件之前结束响应。
你可以这样做:
app.get('/miao', function (req, res) {
res.sendFile(__dirname + '/pubblica/inserisciutente.html', function(err) {
if (err) {
res.status(err.status).end();
}
});
});
请参阅res.sendFile()
here的快速文档。
答案 1 :(得分:0)
如果你想以 res.end()
结束响应,那么你不能在 res.sendFile()
之后提及或指定它,因为 res.sendFile()
是一个异步函数,这意味着它需要一些时间来执行和与此同时,您的下一条指令是 res.end()
将执行,这就是为什么您没有看到 res.sendFile
您可以访问文档以了解有关 res.sendFile()
visit documentation