|
|
/**
|
|
|
* 404 错误
|
|
|
* @return {[type]}
|
|
|
* error处理
|
|
|
* @author: leo<qi.li@yoho.cn>
|
|
|
* @date: 2017/06/23
|
|
|
*/
|
|
|
const logger = global.yoho.logger;
|
|
|
const helpers = global.yoho.helpers;
|
|
|
|
|
|
const forceNoCache = (res) => {
|
|
|
if (res && !res.finished) {
|
|
|
res.set({
|
|
|
'Cache-Control': 'no-cache',
|
|
|
Pragma: 'no-cache',
|
|
|
Expires: (new Date(1900, 0, 1, 0, 0, 0, 0)).toUTCString()
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
|
|
|
const serverError = (err, req, res, next) => { // eslint-disable-line
|
|
|
logger.error(err);
|
|
|
|
|
|
exports.notFound = () => {
|
|
|
return (req, res) => {
|
|
|
forceNoCache(res);
|
|
|
|
|
|
res.status(404);
|
|
|
|
|
|
if (req.xhr) {
|
|
|
return res.json({
|
|
|
code: 404,
|
|
|
message: '抱歉,页面不存在!'
|
|
|
});
|
|
|
}
|
|
|
return res.render('error/404', {
|
|
|
module: 'common',
|
|
|
page: 'error',
|
|
|
title: '页面不存在 | Yoho!Buy有货 | 潮流购物逛不停',
|
|
|
pageFooter: true,
|
|
|
isErr: true
|
|
|
});
|
|
|
};
|
|
|
return res.status(500).json({
|
|
|
code: 500,
|
|
|
message: '服务器错误!'
|
|
|
});
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 服务器错误
|
|
|
* @return {[type]}
|
|
|
*/
|
|
|
exports.serverError = () => {
|
|
|
return (err, req, res, next) => {
|
|
|
forceNoCache(res);
|
|
|
|
|
|
if (err && err.code === 401) {
|
|
|
logger.error(`401 error info:client_type=${req.query.client_type},req.user=${JSON.stringify(req.user)},req.query=${JSON.stringify(req.query)},cookies=${JSON.stringify(req.cookies)}`); // eslint-disable-line
|
|
|
|
|
|
if (req.xhr) {
|
|
|
return res.status(401).json(err);
|
|
|
} else if (req.yoho.isApp) {
|
|
|
if (err.lowVersion) {
|
|
|
return res.render('error/app-auth', {
|
|
|
module: 'common',
|
|
|
page: 'app-update',
|
|
|
localCss: true,
|
|
|
message: err.message
|
|
|
});
|
|
|
}
|
|
|
return res.render('error/app-auth', {
|
|
|
module: 'common',
|
|
|
page: 'app-redirect-login',
|
|
|
message: '验证失败,请登录',
|
|
|
localCss: true,
|
|
|
refer: err.refer
|
|
|
});
|
|
|
} else {
|
|
|
return res.redirect(helpers.urlFormat('/signin.html', {
|
|
|
refer: req.originalUrl
|
|
|
}));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
logger.error(`error at path: ${req.url}`);
|
|
|
logger.error(err);
|
|
|
const notFound = (req, res) => {
|
|
|
res.status(404);
|
|
|
|
|
|
if (!res.headersSent) {
|
|
|
res.status(err.code || 500);
|
|
|
if (req.xhr) {
|
|
|
return res.json({
|
|
|
code: 404,
|
|
|
message: '请求路径不存在'
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (req.xhr) {
|
|
|
return res.json({
|
|
|
code: 500,
|
|
|
message: '服务器错误!'
|
|
|
});
|
|
|
}
|
|
|
res.render('error/404');
|
|
|
};
|
|
|
|
|
|
return res.render('error/500', {
|
|
|
err: err,
|
|
|
module: 'common',
|
|
|
page: 'error',
|
|
|
title: '服务器错误 | Yoho!Buy有货 | 潮流购物逛不停',
|
|
|
pageFooter: true,
|
|
|
isErr: true
|
|
|
});
|
|
|
}
|
|
|
next(err);
|
|
|
};
|
|
|
module.exports = {
|
|
|
notFound,
|
|
|
serverError
|
|
|
}; |
...
|
...
|
|