快速中间件优先级的问题

Problems with express middleware priorities

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

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 阻止所有在它之前加载的页面)

将该函数调用移动到回调函数内的某处:

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(),它不应该以这种方式使用。

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