如何从Express(Node.js)中的表单中传递数据
-
25-10-2019 - |
题
我想获取使用表单从页面传递的数据,并在重定向的页面中使用该数据。
我的客户方面有这个表格。
<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');
});
请帮助。
解决方案
利用 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。显然未定义扩展选项(即使用默认设置),他们似乎希望您决定是否需要嵌套的选项或普通名称值对。
如果您想能够为Express Server中的某些路线和JSON数据解析数据,则可以使用:
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: <true|false> }))
urlencoded()
对于X-WWW-Form-urlenCoded Content类型
true
- 对于嵌套数据结构false
- 姓名价值对
json()
- 用于应用程序/JSON内容类型
请注意,形式/多部分需要不同的身体解析器(例如multer)
其他提示
为了使Express能够很好地处理表单数据,您需要确保 bodyParser
包括这样的:
var express = require('express'),
app = express.createServer();
app.use(express.bodyParser());
//the rest of your configuration
然后在您的帖子处理程序中,您可以通过 Request.body
这样的财产:
app.post('/game', function (req, res) {
res.render('some-file', { name: req.body.name });
});
另外,您还需要使用模板引擎(例如 玉)如果您打算在响应中输出表单数据。
弃用, 接受的答案 是正确的解决方案
如果您需要在视图中访问变量名,则应使用 res.render
功能并传递变量:
res.render('game', {
name: req.body.name
}
然后在玉
div!= name
不隶属于 StackOverflow