【发布时间】:2020-02-27 16:43:11
【问题描述】:
'RangeError: Maximum call stack size exceeded' when sent a post request, Node.js, body-parser, express
我是 node.js 的新手,在关注 node.js 和 express 的本教程系列的 video #30 时遇到了问题
我完全不知道为什么会这样。
我正在观看有关帖子的视频,教程让我为'/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);
/contact page:
<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.post 时有效。你注释掉了函数的哪一部分?我注意到的一件事是您返回的是
res.render('contact', {qs: req.query})而不是res.render('contact-success', {data: req.body}) -
@leosteffen 我从 app.post 开始注释掉了整个事情。我可以用 return null 替换函数中的所有内容;它仍然给出相同的错误,所以当我提出请求时问题似乎正在发生。另外,您如何使您的评论部分具有灰色边框和计算机字体?
-
酷。我还注意到您的 html 中的另外两件事,其中之一可能是给您带来麻烦的原因。 1 - 你没有关闭 - 试试
<input type="email" name="email" >2 - 你的表单输入被声明为命名输入,你需要一个值来使提交工作。试试<input type="submit" value="submit" />(还要注意关闭输入标签/>,因为你也错过了那里。至于灰色边框,使用反引号` `
标签: javascript node.js express