首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >500 TypeError:在将数据从html表单传输到Node服务器时,无法读取未定义的属性“名称”?

500 TypeError:在将数据从html表单传输到Node服务器时,无法读取未定义的属性“名称”?
EN

Stack Overflow用户
提问于 2015-08-31 08:10:28
回答 3查看 2.6K关注 0票数 0

我正在尝试将数据从html页面发送到NodeJS服务器。

我的html代码是:

代码语言:javascript
运行
复制
<body>

        <nav>
<ul>
<li>
  <a href="#" class="button add">Add Product</a>
  <div class="dialog" style="display:none">
  <div class="title">Add Product</div>
  <form action="addevent" method="get">
    <input id = "name" name="name" type="text" placeholder="Product Name"/>
    <input name="code" type="text" placeholder="Product Code"/>
    <input name="category" type="text" placeholder=" Category"/>
    <input name="brand" type="text" placeholder="Brand"/>
<input type="submit" value="Ok"/>
  </form>
</div>
</li>
<li class="radio">
  <a href="#" class="button active"></a>

  <a href="#" class="button"></a>

  <a href="#" class="button"></a>
</li>
</ul>
</div>        
</nav>
<p></p>
    <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>

        <script src="js/index.js"></script>




  </body>

我的服务器代码是:

server.js

代码语言:javascript
运行
复制
var express = require("express"),
    app = express(),
    bodyParser = require('body-parser'),
    errorHandler = require('errorhandler'),
    methodOverride = require('method-override'),
    hostname = process.env.HOSTNAME || 'localhost',
    port = parseInt(process.env.PORT, 10) || 4004,
    publicDir = process.argv[2] || __dirname + '/public';
var exec = require('child_process').exec;
var fs = require('fs');

//Show homepage
app.get("/", function (req, res) {
  res.redirect("/index.html");
});
app.get("/addevent", function (req, res){
   res.send('You sent the name "' + req.body.name + '".');

});

//Search page
app.use(methodOverride());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(express.static(publicDir));
app.use(errorHandler({
  dumpExceptions: true,
  showStack: true
}));

console.log("Server showing %s listening at http://%s:%s", publicDir, hostname, port);
app.listen(port);

但是,当我从html页面提交表单时,它会出现以下错误!

连接500 TypeError:无法读取未定义at (/home/shubham/Music/pricesync/server/node_modules/express/lib/router/route.js:131:13) at app.use.bodyParser.urlencoded.extended Layer.handle request at next (/home/shubham/Music/pricesync/server/node_modules/express/lib/router/route.js:131:13) at Route.dispatch (/home/shubham/Music/pricesync/server/node_modules/express/lib/router/route.js:112:3的属性“名称”/home/shubham/Music/pricesync/server/node_modules/express/lib/router/index.js:277:22 at Function.process_params (/home/shubham/Music/pricesync/server/node_modules/express/lib/router/index.js:330:12) at next (/home/shubham/Music/pricesync/server/node_modules/express/lib/router/index.js:271:10) at expressInit (/home/shubham )/Music/pricesync/server/node_modules/express/lib/middleware/init.js:33:5) at Layer.handle request

EN

回答 3

Stack Overflow用户

发布于 2015-08-31 08:25:07

在GET请求中,没有req.body,这就是为什么出现未定义错误的原因。表单字段的值将作为查询字符串传递,因此需要从req对象读取查询字符串值。

票数 1
EN

Stack Overflow用户

发布于 2015-08-31 09:25:50

尝试将路由放在中间件下面,并使用“POST”http谓词。

代码语言:javascript
运行
复制
var express = require("express"),
    app = express(),
    bodyParser = require('body-parser'),
    errorHandler = require('errorhandler'),
    methodOverride = require('method-override'),
    hostname = process.env.HOSTNAME || 'localhost',
    port = parseInt(process.env.PORT, 10) || 4004,
    publicDir = process.argv[2] || __dirname + '/public';
var exec = require('child_process').exec;
var fs = require('fs');

//Search page
app.use(methodOverride());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(express.static(publicDir));

//Show homepage
app.get("/", function (req, res) {
  res.redirect("/index.html");
});

app.post("/addevent", function (req, res){
   res.send('You sent the name "' + req.body.name + '".');
});

app.use(errorHandler({
  dumpExceptions: true,
  showStack: true
}));

console.log("Server showing %s listening at http://%s:%s", publicDir, hostname, port);
app.listen(port);

确保将表单方法更改为"post“。

票数 0
EN

Stack Overflow用户

发布于 2015-08-31 10:36:05

为了将数据从HTML表单发送到服务器,最佳实践是使用POST方法。表单提交的默认编码是:

Content-Type:application/x-www-form-urlencoded

在Express中,您使用了bodyParser中间件和json()方法,该方法不能工作,因为您发送的数据不是JSON编码的。

您的bodyParser需要像这样在您的路线之前:

代码语言:javascript
运行
复制
app.use(bodyParser.urlEncoded());
app.post("/addevent", function (req, res){
....

我建议你读初学者的书

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32306646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档