Napisałem oprogramowanie pośrednie do Connect i Express, które wymaga pewnego podnoszenia w swojej metodzie instalacji. Ze względu na naturę zadań inicjalizacyjnych te rzeczy są asynchroniczne, więc mam problem z tym, że oprogramowanie pośrednie będzie dostępne tylko po uruchomieniu inicjalizacji.Jak korzystać z asynchronicznej inicjalizacji w oprogramowaniu pośrednim Connect?
Obecnie mam rozwiązać go za pomocą wywołania zwrotnego:
function setupMiddleware(callback) {
doSomeAsyncInitialization(function() {
callback(function (req, res, next) {
// The actual middleware goes here ...
});
});
}
To działa, ale nie jest to miłe dla rozmówcy. Zamiast być w stanie zrobić
app.use(setupMiddleware());
mam zrobić:
setupMiddleware(functin (middleware) {
app.use(middleware);
});
Teraz myślałem, czy istnieje lepsze podejście, na przykład niech oprogramowanie pośrednie inicjalizuje się w tle i opóźnia wszystkie przychodzące żądania, dopóki oprogramowanie pośrednie nie będzie gotowe.
Jak mogę rozwiązać ten problem? Jakieś pomysły lub najlepsze praktyki, których powinienem tutaj użyć?
Ponieważ inicjalizacja dotyczy tylko jednego oprogramowania pośredniego, a nie całej aplikacji. Ten schemat oczywiście działa, ale nie jest "przyjemny". Nie podoba mi się, że wszystko jest wcięte jeden krok (i to nie jest tylko problem formatowania ;-)). –
Akceptuję to. Ponieważ Nodejs nie jest blokujący, musisz uzyskać kod w długotrwałym procesie oddzwaniania lub w sposób pokazany w pytaniu. Ofcource, możesz użyć jakiegoś modułu async. Tutaj założyłem, że twoje oprogramowanie pośrednie jest obowiązkowe dla wszystkich żądań, dzięki czemu zachowałeś funkcję app.use(). Moja sugestia jest taka, że po prostu inicjujesz oprogramowanie pośrednie, zanim zaczniesz słuchać portu. Jeśli oczekujesz więcej niż formatowania, muszę zrozumieć, co się dzieje z funkcją "doSomeAsyncInitialization". –
Cóż, tak jak powiedzieliśmy, może się zdarzyć, że funkcja konfiguracji natychmiast zwróci oprogramowanie pośrednie, ale oprogramowanie pośredniczące opóźnia otrzymywanie żądań do momentu pełnego zainicjowania. –