快速中间件优先级问题

时间:2015-10-21 17:07:11

标签: node.js express routes http-status-code-404 fs

好的,我现在遇到的问题是我的错误处理程序在函数完成之前被调用,目前我使用:

function loadRoutes(route_path) {
    fs.readdir(route_path, function(err, files) {
        files.forEach(function (file) {
            var filepath = route_path + '/' + file;
            fs.stat(filepath, function (err, stat) {
                if (stat.isDirectory()) {
                    loadRoutes(filepath);
                } else {
                    console.info('Loading route: ' + file);
                    require(filepath)(app);
                }
            });
        });
    });
}

setTimeout(function() {
    require('./errorhandle');
}, 10);

超时解决方案有效,但它不合适。如果路线的加载时间超过10毫秒,它将再次中断。 (404阻止之前加载的所有页面)

1 个答案:

答案 0 :(得分:0)

将该函数调用移动到回调函数内的某个位置:

fs.readdir(route_path, function(err, files) {
  ...
  // Move the function call to somewhere inside this callback, 
  ...
  fs.stat(filepath, function (err, stat) {
    ...
    // Or inside this callback,
    ...
  });
  ...
  // Or even later inside the first callback.
  ...
})

我无法确切地告诉您何时尝试调用该函数,但应该在其中一个回调函数内部调用它。您可以自行决定何时需要调用它。这将在适当的时间执行该函数,这与setTimeout()不同,后者不应该以这种方式使用。

此外,您应该在应用开始时需要所有中间件,因为对require的调用是同步和阻塞。