node.js - 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("/");
};
我将非常感谢任何帮助。谢谢你。
解决方案
回答哪个解决了这个问题。
如果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);
});
一旦您可以跟踪错误并修复它,问题就应该得到解决。
推荐阅读
- javascript - 如何在动态网页中进行 Fetch
- javascript - 如何创建像这样的无限全屏滑块?
- javascript - javascript中带有空值的完整数组
- c# - 如何将复杂的 json 解析为 c# .net 类
- reactjs - React Native:如何正确处理嵌套导航?
- vb.net - Datagridview 视觉效果
- python - 如何使用 tkinter 在另一个窗口中添加图像?
- reactjs - 如何使用react + redux在表格中显示大量数据?
- csv - TensorFlow 对象检测 API CSV 文件格式
- sublimetext3 - HTML-CSS-JS Prettify - 按字母顺序排序的 css 属性