Sails 如何在发生 request/400 错误时重定向页面?
Sails How to redirect page when bad request/400 error occurs?
这是我正在使用的代码,我想在发生 400 错误时显示一个新页面。
module.exports = function badRequest(err,viewOrRedirect) {
// Get access to `req` & `res`
var req = this.req;
var res = this.res;
// Serve JSON (with optional JSONP support)
function sendJSON(data) {
if (!data) {
return res.send();
} else {
if (typeof data !== 'object' || data instanceof Error) {
data = {
error: data
};
}
if (req.options.jsonp && !req.isSocket) {
return res.jsonp(data);
} else return res.json(data);
}
}
// Set status code
res.status(400);
// Log error to console
this.req._sails.log.verbose('Sent 400 ("Bad Request") response');
if (err) {
this.req._sails.log.verbose(err);
}
// If the user-agent wants JSON, always respond with JSON
if (req.wantsJSON) {
return sendJSON(err);
}
// Make data more readable for view locals
var locals;
if (!err) {
locals = {};
} else if (typeof err !== 'object') {
locals = {
error: err
};
} else {
var readabilify = function(value) {
if (sails.util.isArray(value)) {
return sails.util.map(value, readabilify);
} else if (sails.util.isPlainObject(value)) {
return sails.util.inspect(value);
} else return value;
};
locals = {
error: readabilify(err)
};
}
// Serve HTML view or redirect to specified URL
if (typeof viewOrRedirect === 'string') {
if (viewOrRedirect.match(/^(\/|http:\/\/|https:\/\/)/)) {
return res.redirect(viewOrRedirect);
} else return res.view(viewOrRedirect, locals, function viewReady(viewErr, html) {
if (viewErr) return sendJSON(err);
else return res.send(html);
});
} else return res.view('400', locals, function viewReady(viewErr, html) {
if (viewErr) return sendJSON(err);
else return res.send(html);
});
};
将重定向设为您的出口之一:
redirect: {
responseType: 'redirect'
},
然后做你正在做的任何检查并抛出出口:
// Permissions
if(!this.req.me) {
throw { redirect: '/login' };
}
对于重定向到 404 可以简单地使用这个:
return res.notFound();
这是我正在使用的代码,我想在发生 400 错误时显示一个新页面。
module.exports = function badRequest(err,viewOrRedirect) {
// Get access to `req` & `res`
var req = this.req;
var res = this.res;
// Serve JSON (with optional JSONP support)
function sendJSON(data) {
if (!data) {
return res.send();
} else {
if (typeof data !== 'object' || data instanceof Error) {
data = {
error: data
};
}
if (req.options.jsonp && !req.isSocket) {
return res.jsonp(data);
} else return res.json(data);
}
}
// Set status code
res.status(400);
// Log error to console
this.req._sails.log.verbose('Sent 400 ("Bad Request") response');
if (err) {
this.req._sails.log.verbose(err);
}
// If the user-agent wants JSON, always respond with JSON
if (req.wantsJSON) {
return sendJSON(err);
}
// Make data more readable for view locals
var locals;
if (!err) {
locals = {};
} else if (typeof err !== 'object') {
locals = {
error: err
};
} else {
var readabilify = function(value) {
if (sails.util.isArray(value)) {
return sails.util.map(value, readabilify);
} else if (sails.util.isPlainObject(value)) {
return sails.util.inspect(value);
} else return value;
};
locals = {
error: readabilify(err)
};
}
// Serve HTML view or redirect to specified URL
if (typeof viewOrRedirect === 'string') {
if (viewOrRedirect.match(/^(\/|http:\/\/|https:\/\/)/)) {
return res.redirect(viewOrRedirect);
} else return res.view(viewOrRedirect, locals, function viewReady(viewErr, html) {
if (viewErr) return sendJSON(err);
else return res.send(html);
});
} else return res.view('400', locals, function viewReady(viewErr, html) {
if (viewErr) return sendJSON(err);
else return res.send(html);
});
};
将重定向设为您的出口之一:
redirect: {
responseType: 'redirect'
},
然后做你正在做的任何检查并抛出出口:
// Permissions
if(!this.req.me) {
throw { redirect: '/login' };
}
对于重定向到 404 可以简单地使用这个:
return res.notFound();