Node.js 如何处理从Express、NodeJS中的路由处理程序调用的函数中的错误?

Node.js 如何处理从Express、NodeJS中的路由处理程序调用的函数中的错误?,node.js,express,error-handling,Node.js,Express,Error Handling,这可能是非常愚蠢的,但我还没有找到太多关于这一点,因为我不明白我应该如何搜索这个 我有一个路由处理程序,它可以根据一些请求参数调用不同的函数,我想知道处理函数内部错误的最佳方法是什么,以便将错误传递给错误处理中间件。 考虑这样的事情: router.get('/error/:error_id', (req, res, next) => { my_function(); } function my_function(){ // do something async, like

这可能是非常愚蠢的,但我还没有找到太多关于这一点,因为我不明白我应该如何搜索这个

我有一个路由处理程序,它可以根据一些请求参数调用不同的函数,我想知道处理函数内部错误的最佳方法是什么,以便将错误传递给错误处理中间件。 考虑这样的事情:

router.get('/error/:error_id', (req, res, next) => {
    my_function();
}

function my_function(){
  // do something async, like readfile
  var f = fs.readFile("blablabla", function (err, data) {
      // would want to deal with the error
  });
}
router.get('/error/:error_id', (req, res, next) => {
    try{
      my_function();
    } catch(e){
      next(e);
    };
}

function my_function(){
  // do stuff
  var f = fs.readFileSync("blablabla"); // possibly throws an error
}
如果在
fs.readFile
期间发生错误,如何将错误传递到
next
以转发到错误中间件?唯一的解决方案是将下一个参数传递给函数
my_函数(next){…}

如果函数没有调用任何异步I/O操作,那么在路由处理程序中执行一个简单的
try/catch
就可以了(我想),如下所示:

router.get('/error/:error_id', (req, res, next) => {
    my_function();
}

function my_function(){
  // do something async, like readfile
  var f = fs.readFile("blablabla", function (err, data) {
      // would want to deal with the error
  });
}
router.get('/error/:error_id', (req, res, next) => {
    try{
      my_function();
    } catch(e){
      next(e);
    };
}

function my_function(){
  // do stuff
  var f = fs.readFileSync("blablabla"); // possibly throws an error
}

希望我有点道理。

您完全正确,应该将
下一个
回调传递到
我的函数
,因为
fs.readFile
是异步的

router.get('/error/:error_id', (req, res, next) => {
  my_function(next);
}

function my_function(next) {
  fs.readFile("blablabla", function (err, data) {
    if (err) {
      next(err);
    } else {
      // Process the data
      // Don't forget to call `next` to send respond the client
    }
  });
}
顺便说一句,你不能这么做

var f = fs.readFile(...)
因为
fs.readFile
是异步的。数据应该在回调中处理