Fixes bug where requestsOfType() would fail if no body

- Passes if request has no body
- Returns a JSON object with an error message when request
  doesn't match type, the response body was "[object Object]"
This commit is contained in:
Andrew Nicolaou 2019-07-21 16:31:14 +02:00 committed by Cassie Tarakajian
parent cc456200a2
commit 7fdd970a43
2 changed files with 17 additions and 3 deletions

View File

@ -132,6 +132,17 @@ app.get('/', (req, res) => {
res.sendFile(renderIndex());
});
// Handle API errors
app.use('/api', (error, req, res, next) => {
if (error && error.code && !res.headersSent) {
res.status(error.code).json({ error: error.message });
return;
}
next(error);
});
// Handle missing routes.
app.get('*', (req, res) => {
res.status(404);

View File

@ -4,11 +4,14 @@
header does not match `type`
*/
const requestsOfType = type => (req, res, next) => {
if (req.get('content-type') != null && !req.is(type)) {
const hasContentType = req.get('content-type') !== null;
const isCorrectType = req.is(type) === null || req.is(type) === type;
if (hasContentType && !isCorrectType) {
if (process.env.NODE_ENV === 'development') {
console.log('in requests of type error');
console.error(`Requests with a body must be of Content-Type "${type}". Sending HTTP 406`);
}
return next({ statusCode: 406 }); // 406 UNACCEPTABLE
return next({ code: 406, message: `Requests with a body must be of Content-Type "${type}"` }); // 406 UNACCEPTABLE
}
return next();