javascript 如何在Express中获取表单传递的数据(Node.js)

vs3odd8k  于 2023-04-19  发布在  Java
关注(0)|答案(5)|浏览(304)

我想获取使用表单从页面传递的数据,并在重定向的页面中使用该数据。
我在客户端有这样的表单:

<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'); 
});
wrrgggsh

wrrgggsh1#

使用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的数据,包括嵌套对象。例如,使用javascript发送的{ person: { name: Adam } },而不是传统HTML表单发送的名称值对。如果您不需要,您可以将扩展值设置为false。不定义扩展选项(即使用默认设置)显然是不赞成的,他们似乎想让你决定是否需要嵌套选项或纯名称/值对。
如果你想在express服务器中解析一些路由的表单数据和其他路由的json数据,你可以用途:

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

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

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

json()-用于应用程序/json内容类型
注意,form/multipart需要不同的body解析器(比如Multer)

更新:如果你得到ExpressJS关于Body-Parser被弃用的错误修复

替换

app.use(bodyparser.json()); //utilizes the body-parser package
app.use(bodyParser.urlencoded({extended: true}));

作者

app.use(express.json()); // Used to parse JSON bodies
app.use(express.urlencoded()); //Parse URL-encoded bodies
3xiyfsfu

3xiyfsfu2#

重要提示:这是不推荐的,accepted answer是正确的解决方案。
为了让express能够很好地处理表单数据,你需要确保你包含了bodyParser,如下所示:

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

app.use(express.bodyParser());
//the rest of your configuration

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

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

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

z31licg0

z31licg03#

或者你可以简单地使用express:

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

   app.use(express.json()) // for json
   app.use(express.urlencoded({ extended: true })) // for form data
wz8daaqr

wz8daaqr4#

如果你需要在视图中访问变量名,你应该使用res.render函数并像这样传递变量:

res.render('game', {
    name: req.body.name
}

然后在玉做

div!= name
enxuqcxy

enxuqcxy5#

在index.html文件中:

<div class="col">First name
        <input type="text" name="firstname" class="form-control" aria-label="First name">
      </div>

在主文件中包含这两个中间件,以便将表单中的数据导入express

app.use(express.json());
app.use(express.urlencoded({extended: false}));

这样我们就可以用

console.log(req.body.firstname);

相关问题