首页 > 解决方案 > Node js Express 错误:ERR_TOO_MANY_REDIRECTS

问题描述

一切正常,直到突然发生此错误:ERR_TOO_MANY_REDIRECTS。我没有运气自己解决这个问题,所以如果可以的话,请帮助我。

我使用 express-handlebars 和 express 来路由我的页面,我发现问题发生在哪里。当我使用 res 时,在我的 bookController 文件中。render ('something') 无论从哪条路线它总是将我重定向到'/'以及当我使用 res. send ('something') 它重定向到它定义的地方。

这是我的 app.js 文件:

const express = require("express");
const mongoose = require("mongoose");
const passport = require("passport");
const path = require("path");
const bodyParser = require("body-parser");
const hbs = require("express-handlebars");
const cookieParser = require("cookie-parser");
const session = require("express-session");
const MongoStore = require("connect-mongo")(session);
const flash = require("connect-flash");
const routes = require("./routes/index");
const expressValidator = require("express-validator");
const errorHandlers = require("./handlers/errorHandlers");

const app = express();

const webpack = require("webpack");
const webpackConfig = require("./webpack.config.js");
const compiler = webpack(webpackConfig);
const webpackDevMiddleware = require("webpack-dev-middleware")(
  compiler,
  webpackConfig.devServer
);

app.use(webpackDevMiddleware);
app.use(require("webpack-hot-middleware")(compiler));

app.use(express.static(path.join(__dirname, "public")));

app.engine(
  "hbs",
  hbs({
    extname: "hbs",
    defaultLayout: "main",
    layoutsDir: __dirname + "/views/layouts",
    partialsDir: __dirname + "/views/partials"
  })
);
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "hbs");

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.use(flash());

app.use(
  session({
    resave: false,
    saveUninitialized: false,
    secret: process.env.SECRET
  })
);
app.use(cookieParser());

app.use(expressValidator());

app.use((req, res, next) => {
  res.locals.flashes = req.flash();
  next();
});

app.use("/", routes);

app.use(errorHandlers.flashValidationErrors);

module.exports = app;

这是我的 index.js 文件

const router = require("express").Router();
const bookController = require("../controllers/bookController");

const { catchErrors } = require("../handlers/errorHandlers");

router.get("/", bookController.home);

router.post("/contact", catchErrors(bookController.contactForm));

router.post("/productPage", catchErrors(bookController.productForm));

module.exports = router;

这是我的 bookController 文件:

const mail = require("../handlers/mail");

exports.home = async (req, res) => {
  res.render("index");
};

exports.contactForm = async (req, res) => {
  const email = req.body.email;
  const subject = req.body.subject;
  const text = req.body.text;

  await mail.send({ email, subject, text });
  res.redirect("/");
};

exports.productForm = async (req, res) => {
  console.log(req.body);

  res.redirect("/");
};

我将非常感谢任何帮助。谢谢你。

标签: node.jsexpressexpress-handlebars

解决方案


回答哪个解决了这个问题。

如果res.render()没有停止请求(与 相同res.send(html)),通常意味着渲染函数有错误。由于的行为res.render()是,如果它出错,它将触发next(err).

https://expressjs.com/en/api.html#res.render

发生错误时,该方法在内部调用 next(err)。

通过将回调传递给渲染,在函数中跟踪错误非常简单;

res.render('index', function(err, html) {
  if (err) console.error(err);
  res.send(html);
});

一旦您可以跟踪错误并修复它,问题就应该得到解决。


推荐阅读