Open
Description
I would like to validate my request (get, post, update or delete), and if the request is not valid, I would like to return an error (status 400 or 500 depending on the error). For the moment I'm using hooks for this task like this
const fortune = require('fortune');
const status = require('./model').status;
const { errors: { BadRequestError } } = fortune;
function input(context, record, update) {
switch (context.request.method) {
case 'create':
if (status.indexOf(record.status) === -1) {
throw new BadRequestError('Invalid status');
} else {
return record;
}
case 'update':
if (!update || !update.replace || !update.replace.status) {
return update;
}
if (status.indexOf(update.replace.status) === -1) {
throw new BadRequestError('Invalid status');
} else {
return update;
}
default: return null;
}
}
The important line here is throw new BadRequestError('Invalid status');
. This line makes fortune returning a 400 error with invalid status
as a content.
Even if I get the desire response, it seems that the error is not fully catch, and so I also get the error in the catch of the listener.
app.use((req, res) => createListener(req, res).catch(err => logger.error(err)));
So here are my questions:
- Is it a desire behaviour ?
- Is it the correct way to validate an entry in the hook ?
- Is it possible to handle exceptions from hooks into fortunejs ?