如何从Express(Node.js)中的表单传递数据

Jud*_*bas 46 javascript node.js express

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

我的客户端有这个表格.

    <form action="game" method="get">
                    <input type="text" name="name"/>
                    <input type="submit" />
    </form>
Run Code Online (Sandbox Code Playgroud)

我在我的服务器上有这个脚本.

app.get('/game',function(req,res){
res.sendfile(__dirname + '/game.html'); 
});
Run Code Online (Sandbox Code Playgroud)

帮忙.

Ale*_*der 49

使用bodyParser.urlencoded()中间件:

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

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

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

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

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

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: <true|false> }))
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 为什么设置`extended:true`?我们期待收到一些特别的东西吗? (3认同)
  • 你在这里有一个非常详细的答案:/sf/ask/2042282581/ (2认同)

Aar*_*ell 34

为了让express快速处理表单数据,您需要确保bodyParser包含如下:

var express = require('express'),
    app = express.createServer();

app.use(express.bodyParser());
//the rest of your configuration
Run Code Online (Sandbox Code Playgroud)

然后在您的POST处理程序中,您可以通过Request.body属性访问表单主体,如下所示:

app.post('/game', function (req, res) {
    res.render('some-file', { name: req.body.name });
});
Run Code Online (Sandbox Code Playgroud)

如果您打算在响应中输出表单数据,您还需要使用模板引擎(如Jade).

不推荐使用,接受的答案是正确的解决方案

  • 这已经改为:`var express = require('express'); var bodyParser = require('body-parser'); var app = express(); app.use(bodyParser.json());` (8认同)
  • @JudeCalimbas这个解决方案对于`POST`是正确的,但你有'GET`的问题.如果你改变了,你可以在`req.body.name`中访问`name`,因为@Slace在他的回答中有. (3认同)
  • 不正确〜解析表单数据你需要```bodyParser.urlencoded()``` (2认同)

Rav*_*ngh 6

或者您可以简单地使用 express 来执行此操作:

   const express = require('express')
   const app = express()

   app.use(express.json()) // for json
   app.use(express.urlencoded({ extended: true })) // for form data
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案。不再需要 bodyparser 库。 (2认同)