ExpressJs res.sendFile在中间件之后不起作用

时间:2015-10-18 18:49:08

标签: javascript node.js express

我正在尝试了解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(..),我可以在页面上正确查看它。我做错了什么?

2 个答案:

答案 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

的更多信息