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();

docs