'RangeError: Maximum call stack size exceeded' when sending a post request, Node.js, body-parser, express
我是 node.js
的新手,在关注 video #30 时遇到了问题关于 Node.js 和 Express 的本教程系列的一部分
我完全不知道为什么会发生这种情况。
我正在观看有关帖子的视频,教程让我为 '/contact'
页面设置了一个 app.post,如下所示,但是当我提交时,出现了如下错误。如果我注释掉 app.post
代码,一切都会正常,所以我认为这就是它的问题所在。
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const urlencodedParser = app.use(bodyParser.urlencoded({ extended: false }));
app.set('view engine', 'ejs');
app.use('/assets', express.static('assets'));
app.get('/', function(req, res){
res.render('index');
});
app.get('/contact', function(req, res){
res.render('contact', {qs: req.query});
});
app.post('/contact', urlencodedParser, function(req, res){
console.log(req.body);
res.render('contact', {qs: req.query});
});
app.get('/profile/:id', function(req, res){
var data = { age: 29, job: "ninja", hobbies: ['eating', 'fighting', 'fishing'] };
res.render('profile', {person: req.params.id, data: data});
});
app.listen(3000);
/联系页面:
<html lang="en" dir="ltr">
<head>
<style media="screen">
body{
background: skyblue;
font-family: verdana;
color: #fff;
padding: 30px;
}
h1{
font-size: 48px;
text-transform: uppercase;
letter-spacing: 2px;
text-align: center;
}
p{
font-size: 16px;
text-align: center;
}
</style>
<meta charset="utf-8">
<title></title>
</head>
<body>
<%- include ('partials/nav') %>
<h1>Contact Us!</h1>
<p>Contact the coolest cats on the web right here...</p>
<form id="contact-form" method="POST" action="/contact">
<label for="who">Who do you want to contact</label>
<input type="text" name="who" value="<%= qs.person %>">
<label for="department">Which department?</label>
<input type="text" name="department" value="<%= qs.dept %>" >
<label for="email">Your email</label>
<input type="email" name="email" >
<input type="submit" name="submit" >
</form>
</body>
</html>
错误:
RangeError: Maximum call stack size exceeded
at /home/gavin/Documents/nodeJsTutorials-master/node_modules/express/lib/router/index.js:629:19
at next (/home/gavin/Documents/nodeJsTutorials-master/node_modules/express/lib/router/index.js:210:14)
at next (/home/gavin/Documents/nodeJsTutorials-master/node_modules/express/lib/router/route.js:127:14)
at Layer.handle_error (/home/gavin/Documents/nodeJsTutorials-master/node_modules/express/lib/router/layer.js:67:12)
at next (/home/gavin/Documents/nodeJsTutorials-master/node_modules/express/lib/router/route.js:135:13)
at /home/gavin/Documents/nodeJsTutorials-master/node_modules/express/lib/router/index.js:635:15
at next (/home/gavin/Documents/nodeJsTutorials-master/node_modules/express/lib/router/index.js:260:14)
at Layer.handle [as handle_request] (/home/gavin/Documents/nodeJsTutorials-master/node_modules/express/lib/router/layer.js:97:5)
at trim_prefix (/home/gavin/Documents/nodeJsTutorials-master/node_modules/express/lib/router/index.js:317:13)
at /home/gavin/Documents/nodeJsTutorials-master/node_modules/express/lib/router/index.js:284:7
最佳答案
此时,app.use 用于向每个路由添加主体解析器... 但正如您所看到的,您也将它作为中间件传递到您的发布路由中......
const urlencodedParser = app.use(bodyParser.urlencoded({ extended: false }));
app.post('/contact', urlencodedParser, function(req, res){
console.log(req.body);
res.render('contact', {qs: req.query});
});
所以...在一只手上,删除 app.use
// const urlencodedParser = app.use(bodyParser.urlencoded({ extended: false }));
app.post('/contact', bodyParser.urlencoded({ extended: false }), function(req, res){
console.log(req.body);
res.render('contact', {qs: req.query});
});
另一方面,从发布路由中删除中间件
const urlencodedParser = app.use(bodyParser.urlencoded({ extended: false }));
app.post('/contact', function(req, res){
console.log(req.body);
res.render('contact', {qs: req.query});
});
PS:
或者也许只是您没有使用主体解析器的变量,因为您应该使用它,也许可以做这样的事情:
const urlencodedParser = bodyParser.urlencoded({ extended: false });
app.post('/contact', urlencodedParser, function(req, res){
console.log(req.body);
res.render('contact', {qs: req.query});
});
关于javascript - 以express方式发送post请求时超出了最大调用堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60437973/