mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	added new hook 'action:meta.override404' so plugins can override the regular handling of pages that are not found
This commit is contained in:
		| @@ -6,12 +6,19 @@ var nconf = require('nconf'), | |||||||
|  |  | ||||||
| 	translator = require('../../public/src/translator'), | 	translator = require('../../public/src/translator'), | ||||||
| 	categories = require('../categories'), | 	categories = require('../categories'), | ||||||
|  | 	plugins = require('../plugins'), | ||||||
| 	meta = require('../meta'); | 	meta = require('../meta'); | ||||||
|  |  | ||||||
| var helpers = {}; | var helpers = {}; | ||||||
|  |  | ||||||
| helpers.notFound = function(req, res, error) { | helpers.notFound = function(req, res, error) { | ||||||
| 	if (res.locals.isAPI) { | 	if (plugins.hasListeners('action:meta.override404')) { | ||||||
|  | 		plugins.fireHook('action:meta.override404', { | ||||||
|  | 			req: req, | ||||||
|  | 			res: res, | ||||||
|  | 			error: error | ||||||
|  | 		}); | ||||||
|  | 	} else if (res.locals.isAPI) { | ||||||
| 		res.status(404).json({path: req.path.replace(/^\/api/, ''), error: error}); | 		res.status(404).json({path: req.path.replace(/^\/api/, ''), error: error}); | ||||||
| 	} else { | 	} else { | ||||||
| 		res.status(404).render('404', {path: req.path, error: error}); | 		res.status(404).render('404', {path: req.path, error: error}); | ||||||
|   | |||||||
| @@ -173,30 +173,38 @@ module.exports = function(app, middleware) { | |||||||
|  |  | ||||||
| function handle404(app, middleware) { | function handle404(app, middleware) { | ||||||
| 	app.use(function(req, res, next) { | 	app.use(function(req, res, next) { | ||||||
| 		var relativePath = nconf.get('relative_path'); | 		if (!plugins.hasListeners('action:meta.override404')) { | ||||||
| 		var	isLanguage = new RegExp('^' + relativePath + '/language/[\\w]{2,}/.*.json'), | 			var relativePath = nconf.get('relative_path'); | ||||||
| 			isClientScript = new RegExp('^' + relativePath + '\\/src\\/.+\\.js'); | 			var	isLanguage = new RegExp('^' + relativePath + '/language/[\\w]{2,}/.*.json'), | ||||||
|  | 				isClientScript = new RegExp('^' + relativePath + '\\/src\\/.+\\.js'); | ||||||
|  |  | ||||||
| 		if (isClientScript.test(req.url)) { | 			if (isClientScript.test(req.url)) { | ||||||
| 			res.type('text/javascript').status(200).send(''); | 				res.type('text/javascript').status(200).send(''); | ||||||
| 		} else if (isLanguage.test(req.url)) { | 			} else if (isLanguage.test(req.url)) { | ||||||
| 			res.status(200).json({}); | 				res.status(200).json({}); | ||||||
| 		} else if (req.accepts('html')) { | 			} else if (req.accepts('html')) { | ||||||
| 			if (process.env.NODE_ENV === 'development') { | 				if (process.env.NODE_ENV === 'development') { | ||||||
| 				winston.warn('Route requested but not found: ' + req.url); | 					winston.warn('Route requested but not found: ' + req.url); | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				res.status(404); | ||||||
|  |  | ||||||
|  | 				if (res.locals.isAPI) { | ||||||
|  | 					return res.json({path: req.path, error: 'not-found'}); | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				middleware.buildHeader(req, res, function() { | ||||||
|  | 					res.render('404', {path: req.path}); | ||||||
|  | 				}); | ||||||
|  | 			} else { | ||||||
|  | 				res.status(404).type('txt').send('Not found'); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			res.status(404); |  | ||||||
|  |  | ||||||
| 			if (res.locals.isAPI) { |  | ||||||
| 				return res.json({path: req.path, error: 'not-found'}); |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			middleware.buildHeader(req, res, function() { |  | ||||||
| 				res.render('404', {path: req.path}); |  | ||||||
| 			}); |  | ||||||
| 		} else { | 		} else { | ||||||
| 			res.status(404).type('txt').send('Not found'); | 			plugins.fireHook('action:meta.override404', { | ||||||
|  | 				req: req, | ||||||
|  | 				res: res, | ||||||
|  | 				error: {} | ||||||
|  | 			}); | ||||||
| 		} | 		} | ||||||
| 	}); | 	}); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user