2015-07-06 1 views
0

В previous question У меня что-то вроде этого работает.Запуск асинхронного кода при запуске экспресс-сервера

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

То, что я не понимаю, в то время, что это правильно добавляет возвращаемый route из обещания app.use однако если последующее app.use после этого заявления (например, вызова ошибки) выражает система маршрутизатора запускайте маршруты ошибок до того, как он выполнит обещанный маршрут.

Мне пришлось бы обернуть все звонки в цепочку обещаний и вернуть приложение из обещания, которое вызывает больше проблем, когда я должен его использовать.

Есть ли какая-либо система/библиотека/etc для управления этим?

Я принципиально хочу запустить асинхронную функцию при запуске сервера, а не каждый раз на конкретном маршруте. Поэтому мне нужно, чтобы код работал выше app.use или код в пределах app.use, который проверяет, была ли эта функция асинхронизации запущена или нет. Мысли?

Это код, который у меня есть, который прыгает прямо на 404 для моего запроса /google.

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); 
}); 
+0

пожалуйста, напишите код из предыдущего вопроса здесь – smnbbrv

+0

добавил код выше – ThomasReggi

+0

* «Есть ли система/библиотека/и т.д. для управления этим?» * Вы уже используете его. Просто добавьте еще один. Затем с обратным вызовом. –

ответ

0

То, что вы хотите сделать здесь всегда держать переменную app на верхнем уровне.

let app = express() 

app.use(...) 

export defaults app 

Если вы хотите запустить что-либо до запуска сервера приложений, оно должно быть обернуто вокруг запросов, запускающих сервер.

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