Node.js中间件重定向无法正常工作

时间:2016-04-12 01:19:32

标签: node.js

您好我的网址以/ getSystemInfo 1st开头,检查是否已登录,是否有有效许可证。如果没有许可证,将重定向到askForLicense页面,但此重定向不起作用。

app.get('/getSystemInfo', isAuthenticated, hasLicense, function(req, res)
{
    logger.debug('querying iStar status');
    ...
}

var isAuthenticated = function(req, res, next)
{
    if( req.isAuthenticated() ) {
        console.log("Very good, you are logged in ...");
        return next();
    } else {
        console.log("Sorry, you are NOT logged in yet ...");
        res.send(401);
    }
}

var hasLicense = function(req, res, next)
{
    // queryLicense.py will return error is no license
    var getLicense = exec('queryLicense.py',
                     function (error, stdout, stderr) {
                         if (error !== null) {
                             console.log('License exec error: ' + error);
                             res.redirect('/askForLicense');
                         } else {
                             console.log("---- good, you have license ----\n");
                             return next();
                         }
                     }
    );
};

app.get('/askForLicense', function(req, res)
{
    console.log("---- Notice: need license ----");
    res.sendfile(path.resolve('../client/askForLicense.html'));
});

控制台输出如下:

非常好,您已登录...

许可证执行错误:错误:命令失败:/ bin / sh -c getLicense.py

但我没有看到登录/ askForLicense,为什么? 非常感谢!

1 个答案:

答案 0 :(得分:0)

您的中间件功能按此顺序调用,

/getSystemInfo, isAuthenticated, hasLicense, /askForLicense

由于您在中间件exec("getLicenese.py")内调用hasLicense并且它引发错误,因此调用无法到达下一个中间件/askForLicense