首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于表单参数的查询mongodb

基于表单参数的查询mongodb
EN

Stack Overflow用户
提问于 2017-10-11 23:06:41
回答 2查看 418关注 0票数 0

我正在尝试基于表单参数查询mongodb。

代码语言:javascript
运行
复制
<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时,我会得到未定义的信息。

代码语言:javascript
运行
复制
app.get('/word', function(req, res) {
console.log(req.body.word);
})

我应该放置这样的url参数吗?

代码语言:javascript
运行
复制
<form action="/word/<%= quote %>" method="GET">
    Get quote:<input type="text" name="word" value="">
    <br><br>
    <input type="submit" value="Submit">
</form> 

在server.js中

代码语言:javascript
运行
复制
app.get('/word/:quote', function(req, res) {
console.log(req.body.word);
})
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-12 00:30:31

你有三个主要的选择可供选择。

选项1是使用带有GET请求的表单。<input>值将被附加到URL上,类似于/word/?word=value。在服务器上,您需要这样的东西:

代码语言:javascript
运行
复制
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的末尾,而是将其放在请求正文中。

在服务器上,您可以这样做:

代码语言:javascript
运行
复制
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>中的值,如果它不依赖于该值,那么就没有问题)。在这种情况下,服务器将是:

代码语言:javascript
运行
复制
app.get('/word/:quote', function(req, res) {
    console.log(req.params.quote);
});

请注意,这三个选项中的每一个都对分析过的数据使用了不同的属性:req.queryreq.bodyreq.params

还有其他可供选择的方案。如果您正在使用AJAX,您可以选择任何您想要的格式,可能是上面的格式之一,也可能是像JSON这样的替代格式,然后可以使用bodyParser.json进行解析。

有关bodyParser的更多信息,请参见:

https://expressjs.com/en/resources/middleware/body-parser.html

请注意,Express 4.16.0引入了express.jsonexpress.urlencoded,可以使用它们来代替bodyParser

票数 0
EN

Stack Overflow用户

发布于 2017-10-11 23:31:17

您应该使用post方法而不是get

不能通过get请求发送主体。

身体将与mime类型的multipart/form-data一起发送

因此,您需要使用像穆特这样的中间件来解析它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46698863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档