Size: a a a

Node.js — русскоговорящее сообщество

2020 May 02

AP

Andrii Plus in Node.js — русскоговорящее сообщество
app.use('/api/v1/sale-add', handleError(SaleAddController))
источник

V

Veli in Node.js — русскоговорящее сообщество
Andrii Plus
Можно оборачивать контроллер в некоторый HOC где собственно можем пропустить ошибку
а как именно сделать "пропускание" ошибки из промиса?
источник

V

Veli in Node.js — русскоговорящее сообщество
все равно ж промис заблокирует выбрасывание ошибки наверх, разве нет? Сейчас попробую
источник

AP

Andrii Plus in Node.js — русскоговорящее сообщество
const handleError = controller => async (req, res, next) => {
 try {
   const rs = await controller(req);
   res.send(rs);
 } catch(err) {
   next(err);
 }
}
источник

AP

Andrii Plus in Node.js — русскоговорящее сообщество
приблизительно так..
источник

AP

Andrii Plus in Node.js — русскоговорящее сообщество
и потом использовать
app.use('/api/v1/sale-add', handleError(SaleAddController))
источник

AP

Andrii Plus in Node.js — русскоговорящее сообщество
либо, (если нужно другой статус (201 наример)
app.use('/api/v1/sale-add', handleError(SaleAddController, {statusCode: 201}))
ну и соответственно изменить сам хендлер
источник

V

Veli in Node.js — русскоговорящее сообщество
контроллер это класс, вряд ли его можно в роут так засунуть, но суть я понял. Вот ошибка, к слову
источник

V

Veli in Node.js — русскоговорящее сообщество
я вроде понял, как потенциально можно это сделать, сейчас попробую
источник

AP

Andrii Plus in Node.js — русскоговорящее сообщество
👍
источник

V

Veli in Node.js — русскоговорящее сообщество
вот так работает по той причине, что цепочка промисов до этого момента идет и промис не режектится, я так понимаю
источник

V

Veli in Node.js — русскоговорящее сообщество
т.е. не на уровне роутера, а на уровне эндпоинта. Но это уже что-то, спасибо. Сейчас попробую как-то это на уровень роутера вытащить, но мне кажется, что режектнутый промис туда никак ошибку не выбросит
источник

AP

Andrii Plus in Node.js — русскоговорящее сообщество
ошибка должна уже бить на уровне  (здесь должна отлавливатся)

app.use((err, req, res, next) => {

  res..send({"error": ""});
});
источник

V

Veli in Node.js — русскоговорящее сообщество
вот так уже не работает - промис внутри где-то там отвалился и нода это захендлила
источник

V

Veli in Node.js — русскоговорящее сообщество
Andrii Plus
ошибка должна уже бить на уровне  (здесь должна отлавливатся)

app.use((err, req, res, next) => {

  res..send({"error": ""});
});
такое есть, но оно только синхронные ошибки отрабатывает. Те, которые в трюкач выпадают, а не в кетч блок промиса
источник

V

Veli in Node.js — русскоговорящее сообщество
это особенность жса уже
источник

AP

Andrii Plus in Node.js — русскоговорящее сообщество
async (req, res, next) => {
 try {
   const data =  await SaleAdRouter(req, res);
   res.send(data);
 } catch(err) {
    next(err);
 }
}
источник

V

Veli in Node.js — русскоговорящее сообщество
роутер не отдает промис, нечего эвейтить
источник

AP

Andrii Plus in Node.js — русскоговорящее сообщество
Вы используете экспресс ?
источник

V

Veli in Node.js — русскоговорящее сообщество
да
источник