Допустим, произошел сбой моего сервера MS SQL, и мой клиент приложения запросил что-то из API. Прямо сейчас он будет просто вращаться до тех пор, пока время ожидания неотвеченного запроса не будет превышено на Express.
Когда в TypeORM включено ведение журнала, я вижу, что соответствующий запрос выполняется.
Я бы предпочел вернуть ответ API, информирующий клиента о том, что база данных недоступна.
Это фактический код в моем контроллере пользователя.
public static listAll = async (req: Request, res: Response) => {
const userRepository = getRepository(User);
const users = await userRepository
.find()
res.send(users);
};
Я пытался поймать запрос, который используется в соответствующий контроллер, но, похоже, ничего не меняет. См. Пример ниже.
const users = await userRepository
.find()
.catch(error => {
console.log(error); // this is never triggered
});
В консоли не выводится сообщение об ошибке.
Это мои параметры подключения в TypeORM
createConnection({
type: 'mssql',
host: process.env.TYPEORM_HOST,
port: parseInt(process.env.TYPEORM_PORT, 0),
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE,
synchronize: true,
logging: true,
entities: models,
cli: {
entitiesDir: 'src/entity',
migrationsDir: 'src/migration',
subscribersDir: 'src/subscriber',
},
})
.then(connection => {
const server = http.createServer(App);
server.listen({ port: `${process.env.APP_PORT}` }, () => {
console.log(`? Server ready at http://${process.env.TYPEORM_HOST}:${process.env.APP_PORT}`);
});
if (connection.isConnected) {
console.log(`Database ${connection.options.database} connected`);
}
})
.catch(error => console.log(error));
Я также пытался установить requestTimeout в createConnection до 1000 (мс), с тем же результатом.