运行 express 服务器启动时的异步代码

Running asynchronous code when express server starts

我得到了类似的东西。

promiseRoute().bind(app).then(app.use)

我当时没有意识到的是,这正确地将 returned route 从 promise 添加到 app.use 但是如果有后续的 app.use 在此语句(例如错误调用)之后表示路由器系统将 运行 错误路由在它之前 运行 承诺 returned 路由。

我必须将所有调用包装在 promise 链中,return app 包装在 promise 中,这在我必须使用它时会导致更多问题。

有没有管理这个的系统/库/等?

我基本上想 运行 服务器启动时的异步函数,而不是每次都在特定路由上。所以我需要 运行ning 上面的代码 app.useapp.use 中的代码来检查异步函数是否有 运行 。想法?

这是我的代码,可以根据我的 /google 请求跳转到 404

var googleRoute = require("./google-route")

googleRoute.on("redirect", function(req, res, next){
  return res.redirect(req.googleRedirect)
})

googleRoute.on("tokens", function(req, res, next){
  return res.json(req.googleTokens)
})

// returns express route
googleRoute.use({
  "toRedirectUrl": "/google",
  "appCredentials": path.join(__dirname, "google-tokens.json"),
  "genetateAuth": {
    "approval_prompt": "force",
    "access_type": 'offline',
    "scope": "https://www.googleapis.com/auth/drive",
  }
}).bind(app).then(app.use)

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

您在这里要做的是始终将 app 变量保持在顶层。

let app = express()

app.use(...)

export defaults app

如果您想 运行 在应用服务器启动之前执行某些操作,它应该包含在启动服务器的请求中。

checkIfDatabaseIsUp().then(() => {
  let server = http.createServer(app)
})