在Express中收听res.sendFile错误

时间:2016-02-13 01:23:16

标签: node.js express

我有这个简单的代码

router.post('/foo', function(req,res,next){
    try{
      var file = path.resolve(folder, runId, 'temp.html');
      res.sendFile(file);
    }
    catch(err{
      //not reached
      next(err);
    }
});

我尝试发送的文件不存在,这是一个可能但很好的例外。但是,res.sendFile不会抛出同步错误。

似乎我不能用这种方式听错:

res.sendFile(file).on('error', function(){}) //?

那么我们如何处理res.sendFile抛出的错误?

2 个答案:

答案 0 :(得分:5)

试试这个,请参阅文档res.sendFile

var options = {
    root: __dirname + '/public/',
    dotfiles: 'deny'
  };

  var fileName = path.resolve(folder, runId, 'temp.html');
  res.sendFile(fileName, options, function (err) {
    if (err) {
      console.log(err);
      res.status(err.status).end();
    }
    else {
      console.log('Sent:', fileName);
    }
  });

答案 1 :(得分:3)

请详细查看文档:
http://expressjs.com/en/4x/api.html#res.sendFile

根据文档,您的代码应如下所示:

router.post('/foo', function(req,res,next){
      var file = path.resolve(folder, runId, 'temp.html');
      res.sendFile(file, options, function(err) {
        if(err) {
            res.status(err.staus).end()
        }
      });
});

希望这有帮助