Sails当发生错误的request / 400错误时,如何重定向页面?

时间:2018-12-06 07:08:59

标签: node.js mongodb express sails.js bad-request

这是我正在使用的代码,当发生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);  
    });  
};  

2 个答案:

答案 0 :(得分:0)

使您的出口之一重定向:

redirect: { responseType: 'redirect' },

然后进行所有检查,然后退出出口: // Permissions if(!this.req.me) { throw { redirect: '/login' }; }

答案 1 :(得分:0)

要重用404,可以使用以下方法:

return res.notFound();

docs