Обработка асинхронных ошибок на node.js и экспрессJavascript

Форум по Javascript
Ответить
Anonymous
 Обработка асинхронных ошибок на node.js и экспресс

Сообщение Anonymous »

Я создаю приложение Node.js с Express и пытаюсь реализовать подпрограмму обработки ошибок. Это работает с тестовыми ошибками, которые я бросаю из своего контроллера, но когда возникает реальная ошибка, моя промежуточная ошибка не поймает. Вместо этого консоль печатает ошибку, и сервер останавливается. Это было бы серьезной проблемой в производстве, если какая -либо ошибка приведет к сбою сервера. Вот что я сделал:
В моем index.js я зарегистрировал промежуточное программное обеспечение для обработки ошибок:

Код: Выделить всё

// Error handler middleware (must be after all routes)
app.use(errorHandler);
my errorhandler промежуточное программное обеспечение (работает, когда ошибка теста была брошена):

Код: Выделить всё

const errorHandler = async (err, req, res, next) => {
let errorId = saveErrorToDatabase();
return Responses.internalError(res, `Internal Server Error (ID: ${errorId})`);
};
< /code>
Тогда у меня есть класс контроллера, который мой маршрут указывает на: < /p>
async create(req, res, next) {
const { name, type } = req.body;
const inserted_id = await (new Account()).insert(name, type);
Responses.success(res, 201, { id: inserted_id, message: 'Account created successfully' });
},
Моя учетная запись объект:

Код: Выделить всё

async insert(name, type) {
return this.#crudDBUtil.insert({ name, type });
}
< /code>
CrudDBUtil
- это класс, который я создал для обработки операций базы данных. Операция вставки генерирует ошибку (необходимое поле не было предоставлено). Я ожидал, что API ответит «Ошибка внутреннего сервера: ID 9999» и сохранить ошибку в базе данных. Вместо этого я получаю эту ошибку (детали опущены для ясности и конфиденциальности): < /p>
{my full path}\pool.js:36
const localErr = new Error();
^

Error: Field 'user_id' doesn't have a default value
at {Full Call stack} {
code: 'ER_NO_DEFAULT_FOR_FIELD',
errno: 1364,
sql: '{sql sentence}",
sqlState: 'HY000',
sqlMessage: "Field 'user_id' doesn't have a default value"
}

Node.js v20.17.0
< /code>
My issue isn't with the error itself - I know what it is and how to fix it. However, I want future errors to be registered in the database and, most importantly, not cause the server to stop running. How can I make sure my error handler catches all errors, including those from async operations?


Подробнее здесь: https://stackoverflow.com/questions/795 ... nd-express
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»