Я пишу промежуточное ПО для конечных точек API в моем приложении, которое отвечает на веб-хуки из других приложений, и я относительно новичок в Koa, поэтому не совсем знаком с его шаблонами.
Я хотел бы структурировать свой промежуточное программное обеспечение выглядит следующим образом:
exports.updateReceived = async (ctx, next) => {
// Respond to server issuing the webhook
ctx.res.body = "ok";
ctx.res.statusCode = 200;
// Grab what we need from the request
const { headers, state, request } = ctx;
const { body } = request;
// Do some async work
const { example } = await doSomeAsyncWork(ctx);
// Prepare a database query
const query = { aValue: anId };
// Run the DB query
const result = await Thing.findOne(query);
// Add data to the request
state.thing = result;
// Move on...
return next();
};
Однако, похоже, это не работает, так как ошибка в любом из моих асин c методов может привести к ошибке маршрута.
Мой цель состоит в том, чтобы эта конечная точка всегда отвечала «да, хорошо» (немедленно), что означает, что приложение должно обрабатывать любые состояния ошибок.
Я достаточно хорошо это исследовал и натолкнулся на этот паттерн :
app.use(async ctx => {
db.fetch() // Assuming a Promise is returned
.then(() => { ... })
.catch(err => {
log(err)
})
// status 200 will be returned regardless of if db.fetch() resolves or rejects.
ctx.status = 200
})
Однако это не отвечает моим потребностям, поскольку промежуточное программное обеспечение не использует next
, поэтому, насколько я могу судить, это не совсем полезный шаблон.
Может ли кто-нибудь сказать мне, что я пропускаю?