На моем сайте у меня есть интерфейс angular, вызывающий сервер экспресс.
Некоторые экспресс-вызовы обращаются к базе данных для выполнения хранимых процедур, что может занять много времени.
Это длительное время ожидания ответа от Express для возврата к angular вызывает ошибку 504.
Можно ли как-то настроить это так, чтобы angular отправлял сообщение о выполнении в Express, а затем пользователь продолжал использовать сайт angular, пока длительная хранимая процедура завершается на экспрессе? (В настоящее время, если пользователь выполняет один из этих длительных процессов, а затем перемещается по сайту angular, это убивает процесс).
Пример углового вызова:
getDnSP(DnSPCall): Observable<DnSpResult[]> {
const url = 'http://localhost:4200/'+'dn_sp';
const data = ({
dnspcall: DnSPCall
});
return this._http.post(url, data)
.pipe(
map((res) => {
console.info(res);
return <DnSpResult[]> res;
})
);
}Образец Экспресс:
router.post('/dn_sp', function (req, res) {
var dnspcall = req.body.dnspcall;
console.info(dnspcall);
var sql = "CALL " + db + ".DN_OBJECT(" + dnspcall + "P_ERROR_CD,P_MSG);";
return db.read(sql)
.then((x) => {
console.info(x);
};
client.sendMail(mailOptions, function (error, info) {
if (error) {
console.info(error);
} else {
console.info('Email sent: ' + info.response);
}
});
} else {
console.info("No errors!");
}
console.info("Error Code: " + errorcd);
res.send(x);
})
});Вы можете отправить ответ от экспресса пользователю и запустить процедуру хранения в отдельном событии.
@Bernhard - проблема, с которой я столкнулся, заключается в том, что если пользователь изменит страницу и отправит другой запрос, он уничтожит исходный запрос.





Вы можете использовать
websocketsкак socket.io для передачи информации клиенту, когда запрос был полностью обработан.