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 d4914983a4
commit cd21e9ae72
2 changed files with 17 additions and 3 deletions

View file

@ -138,6 +138,17 @@ app.get('/', (req, res) => {
res.sendFile(renderIndex()); 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. // Handle missing routes.
app.get('*', (req, res) => { app.get('*', (req, res) => {
res.status(404); res.status(404);

View file

@ -4,11 +4,14 @@
header does not match `type` header does not match `type`
*/ */
const requestsOfType = type => (req, res, next) => { 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') { 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(); return next();