Узел JS Express Ошибка: ERR_TOO_MANY_REDIRECTS - PullRequest
0 голосов
/ 09 февраля 2019

Все работало нормально, пока вдруг не произошла эта ошибка: ERR_TOO_MANY_REDIRECTS.Мне не повезло выяснить это самостоятельно, поэтому, пожалуйста, помогите мне, если можете.

Я использую экспресс-руль и экспресс для маршрутизации своих страниц, и я понял, что видел, где возникает проблема.В моем файле bookController, когда я использую res. render («что-то»), независимо от того, по какому маршруту он всегда перенаправляет меня на «/», и когда я использую res. send («что-то»') Он перенаправляет туда, где он определен.

Это мой файл 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("/");
};

Буду очень признателен за любую помощь.Спасибо.

1 Ответ

0 голосов
/ 09 февраля 2019

Ответ, который решил вопрос.

Если 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);
});

Как только вы сможете отследить ошибку и исправить ее, проблемадолжно быть решено.

...