我正在尝试基于表单参数查询mongodb。
<form action="/word/" method="GET">
Get quote:<input type="text" name="word" value="">
<br><br>
<input type="submit" value="Submit">
</form>
但是在我的server.js中,当我尝试使用console.log时,我会得到未定义的信息。
app.get('/word', function(req, res) {
console.log(req.body.word);
})
我应该放置这样的url参数吗?
<form action="/word/<%= quote %>" method="GET">
Get quote:<input type="text" name="word" value="">
<br><br>
<input type="submit" value="Submit">
</form>
在server.js中
app.get('/word/:quote', function(req, res) {
console.log(req.body.word);
})
发布于 2017-10-12 00:30:31
你有三个主要的选择可供选择。
选项1是使用带有GET请求的表单。<input>
值将被附加到URL上,类似于/word/?word=value
。在服务器上,您需要这样的东西:
app.get('/word', function(req, res) {
console.log(req.query.word);
});
选项2是使用带有POST请求的表单,默认为使用content-type
(enctype
) of application/x-www-form-urlencoded
。它以与GET请求相同的方式对<input>
进行编码,但它不是将其放在URL的末尾,而是将其放在请求正文中。
在服务器上,您可以这样做:
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false}));
app.post('/word', function(req, res) {
console.log(req.body.word);
});
选项3是像/word/value
一样将其编码到URL中,但这将需要一些客户端JavaScript在提交<form>
之前完成<form>
(假设URL依赖于<input>
中的值,如果它不依赖于该值,那么就没有问题)。在这种情况下,服务器将是:
app.get('/word/:quote', function(req, res) {
console.log(req.params.quote);
});
请注意,这三个选项中的每一个都对分析过的数据使用了不同的属性:req.query
、req.body
或req.params
。
还有其他可供选择的方案。如果您正在使用AJAX,您可以选择任何您想要的格式,可能是上面的格式之一,也可能是像JSON这样的替代格式,然后可以使用bodyParser.json
进行解析。
有关bodyParser
的更多信息,请参见:
https://expressjs.com/en/resources/middleware/body-parser.html
请注意,Express 4.16.0引入了express.json
和express.urlencoded
,可以使用它们来代替bodyParser
。
发布于 2017-10-11 23:31:17
https://stackoverflow.com/questions/46698863
复制相似问题