一尘不染

如何从Express(Node.js)中的表单获取数据

node.js

我想获取使用表单从页面传递的数据,并在重定向的页面中使用该数据。

我的客户端有以下表​​格:

<form action="game" method="get">
    <input type="text" name="name"/>
    <input type="submit" />
</form>

我的服务器中有这个脚本:

app.get('/game',function(req,res){
    res.sendfile(__dirname + '/game.html'); 
});

阅读 758

收藏
2020-07-07

共1个答案

一尘不染

使用bodyParser.urlencoded()中间件:

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));

然后,表单值将在req.body上:

app.post('/game', function (req, res) {
    res.render('the_template', { name: req.body.name });
});

设置{ extended: true }允许bodyParser接受包括嵌套对象在内的表单数据中的json之类的数据。例如,{ person: { name: Adam } }使用javascript发送而不是使用传统HTML格式发送的名称/值对。如果不需要,可以将扩展值设置为false。不定义扩展选项(即使用默认设置)显然已被弃用,他们似乎希望您决定是否需要嵌套选项或纯名称值对。

如果您希望能够在快递服务器中解析某些路由的表单数据和其他路由的json数据,则可以使用:

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: <true|false> }))

urlencoded() 适用于x-www-form-urlencoded内容类型

  • true -用于嵌套数据结构
  • false -用于名称值对

json() -适用于application / json内容类型

请注意,form / multipart需要不同的正文解析器(例如multer)

2020-07-07