Javascript 使用路由器中间件时获取POST请求

Javascript 使用路由器中间件时获取POST请求,javascript,node.js,express,router,Javascript,Node.js,Express,Router,我正在使用Passport对NodeJS上的用户进行身份验证。目前我正在使用ExpressJS,我正在尝试路由我的流量。我目前使用以下代码: website.js(主文件) routes.js var pages = { home: require("./pages/home"), about: require("./pages/about"), register: require("./pages/register"), login: require("./pa

我正在使用Passport对NodeJS上的用户进行身份验证。目前我正在使用ExpressJS,我正在尝试路由我的流量。我目前使用以下代码:

website.js(主文件)

routes.js

var pages = {
    home: require("./pages/home"),
    about: require("./pages/about"),
    register: require("./pages/register"),
    login: require("./pages/login"),
    api: require("./api/index")
};

module.exports = function(app) {
    app.use("/", pages['home']);
    for (page in pages) {
        app.use("/" + page, pages[page]);
    }

    app.get("/logout", function(req, res) {
        req.logout();
        req.redirect("/");
    });
}
var express = require('express');
var router = express.Router();
var app = express();

router.get("/", function(req, res) {
  res.render("register", { page: "Register", message: req.flash("registerMessage") });
});

app.post("/", passport.authenticate("register", {
    successRedirect: "/about/",
    failureRedirect: "/register/",
    failureFlash: true,
    successFlash: "Logged in!"
}));

module.exports = router;
register.js

var pages = {
    home: require("./pages/home"),
    about: require("./pages/about"),
    register: require("./pages/register"),
    login: require("./pages/login"),
    api: require("./api/index")
};

module.exports = function(app) {
    app.use("/", pages['home']);
    for (page in pages) {
        app.use("/" + page, pages[page]);
    }

    app.get("/logout", function(req, res) {
        req.logout();
        req.redirect("/");
    });
}
var express = require('express');
var router = express.Router();
var app = express();

router.get("/", function(req, res) {
  res.render("register", { page: "Register", message: req.flash("registerMessage") });
});

app.post("/", passport.authenticate("register", {
    successRedirect: "/about/",
    failureRedirect: "/register/",
    failureFlash: true,
    successFlash: "Logged in!"
}));

module.exports = router;
我面临的问题是,对这一问题的POST请求将导致404。找不到该页。GET请求(so/register)正确地显示了注册表,但提交后我得到了404。如果我将
router.get(“/”,function(req,res){})
更改为
router.use(“/”,function(req,res,next){})
,我将在调用“next()”(发送后无法设置头)时收到HTTP 500错误,POST仍然不起作用

有谁能告诉我如何正确捕获路由器中间件后面的POST请求吗?

我解决了这个问题 我通过以下方法解决了我的问题:

router.route("/")
    .get(function(req, res, next) {
        res.render("register", { page: "Register", message: req.flash("registerMessage") });
    })
    .post(passport.authenticate("register", {
        successRedirect: "/about/",
        failureRedirect: "/register/",
        failureFlash: true,
        successFlash: "Logged in!"
    }));

您可以发布使用router.use时遇到的500错误吗?标头错误是因为您正在移动passport.authenticate函数,并自己调用它。这不再使它成为专门的中间件,它尝试更改Express已经提供的头文件。我对帖子不太确定,我将尝试一些示例代码。@RubenRutten您能回答自己的问题吗?这将结束这个问题,并使解决方案对未来的读者更加明显。