next()在Express 4中不起作用

时间:2014-08-22 11:44:40

标签: node.js express

这是我的app.js

 function requireLogin(req, res, next) {
    if (req.isAuthenticated()) {
        next();
    } else {
        res.redirect("/");
    }
}

/**
 * Routes
 */
var index = require('./routes/index');
var dashboard = require('./routes/dashboard');

app.use('/', index);
app.use('/dashboard', requireLogin, dashboard);

路由/ dashboard.js

var express = require('express');
var router = express.Router();

router.route('/')
    .get(function (req, res, next) {
        res.render('dashboard/index', {}); 
    });

module.exports = router;

登录后,我被引导至路线/dashboard,但我获得了状态404。 如果我尝试删除函数requireLogin,则路由/dashboard可见且正常工作。

为什么呢? 我做了一些测试,我发现问题是next()。 对于登录,我使用passport运行良好。

2 个答案:

答案 0 :(得分:0)

实际上我有一个非常类似的问题,对我而言,它与处理身份验证的中间件无关,这是我的路由设置方式。 我想你正试图在你想要在dashboard.js中POST凭据的路由上收到GET请求:

router.route('/')
.get(function (req, res, next) {
    res.render('dashboard/index', {}); 
});

应该是:

router.route('/')
.post(function (req, res, next) {
    res.render('dashboard/index', {}); 
});

因为您要将凭据发布到该路由。

答案 1 :(得分:0)

如果您仍然不知道,可以放return next()而不是next()
所以这个:

 function requireLogin(req, res, next) {
    if (req.isAuthenticated()) {
        next();
    } else {
        res.redirect("/");
    }
}

应该变成这样:

 function requireLogin(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    } else {
        res.redirect("/");
    }
}

希望我能帮上忙!