Express 在 glob 完成路由文件之前正在监听

Express is listening before glob is done going through route files

在我的 js 类 我有快递的路线在 route 属性

我的问题是 express 在通过 glob:

完成路由加载之前开始监听
glob("pages/**/*.js", (error, file) => {
  import("./" + file).then((page) => {
    console.log(new page.default().route);
  });
});

app.listen(config.port, () =>
  console.log(`App listening on http://localhost:${config.port}`)
);

这是我的控制台输出:

node index.js
App listening on http://localhost:1337
{ uri: '/users' }

注意 uri 行是如何出现在 app listening 之后,而它应该在

之前

我也尝试过使用 glob.sync 并且发生了同样的事情

如何让代码在 app.listen 触发之前等待路由文件完成加载?

你可以用glob.sync解决这个问题。

const pages = glob("pages/**/*.js")

for (pageName of pages) {
  const page = await import("./" + pageName)
  console.log(new page.default().route)
}

app.listen(config.port, () =>
  console.log(`App listening on http://localhost:${config.port}`)
)

因为 import() 是异步的,所以它 returns 一个 Promise,您正在等待使用 .then(...),它不会阻塞。通过使用 await,代码等待模块被导入。

您需要在支持顶级等待或在异步函数内的环境中执行此操作。 示例:

async function startApp() {
 // const pages = ...
}
startApp()

在此处阅读有关承诺的更多信息: https://www.w3schools.com/js/js_promise.asp