From 5d94cb369daa1992f31f3a34efd0712e64a468e5 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Sat, 16 Jul 2016 10:40:14 -0700 Subject: [PATCH] Feature(server): Add response type detecting to lang redirect --- server/boot/z-lang-redirect.js | 19 ++++++++++++++++--- server/middlewares/error-handlers.js | 6 +++--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/server/boot/z-lang-redirect.js b/server/boot/z-lang-redirect.js index f36f5df21f..1b94d296c1 100644 --- a/server/boot/z-lang-redirect.js +++ b/server/boot/z-lang-redirect.js @@ -1,5 +1,6 @@ import supportedLanguages from '../../common/utils/supported-languages'; import passThroughs from '../utils/lang-passthrough-urls'; +import accepts from 'accepts'; // import debug from 'debug'; // const log = debug('fcc:controller:lang-redirect'); @@ -7,6 +8,8 @@ const toLowerCase = String.prototype.toLowerCase; export default function redirectLang(app) { app.all('*', function(req, res, next) { + const accept = accepts(req); + const type = accept.type('html', 'json', 'text'); const { url, path } = req; const langCode = toLowerCase.call(url.split('/')[1]); @@ -14,14 +17,24 @@ export default function redirectLang(app) { return next(); } - if (supportedLanguages[langCode]) { + if (!supportedLanguages[langCode]) { + // language aware redirect + console.log('foo', path, req.method); + return res.redirect(url); + } + + if (type === 'html') { req.flash('errors', { msg: `We couldn't find path ${ path }` }); return res.render('404', { title: '404'}); } - // language aware redirect - return res.redirect(url); + if (type === 'json') { + return res.status('404').json({ error: 'path not found' }); + } + + res.setHeader('Content-Type', 'text/plain'); + return res.send('404 path not found'); }); } diff --git a/server/middlewares/error-handlers.js b/server/middlewares/error-handlers.js index c37cd46908..87544bd4a9 100644 --- a/server/middlewares/error-handlers.js +++ b/server/middlewares/error-handlers.js @@ -19,10 +19,10 @@ export default function prodErrorHandler() { } // parse res type - var accept = accepts(req); - var type = accept.type('html', 'json', 'text'); + const accept = accepts(req); + const type = accept.type('html', 'json', 'text'); - var message = 'Oops! Something went wrong. Please try again later'; + const message = 'Oops! Something went wrong. Please try again later'; if (type === 'html') { if (typeof req.flash === 'function') { req.flash(err.messageType || 'errors', {