根据表单参数查询mongodb

时间:2017-10-11 23:06:42

标签: mongodb express ejs

我正在尝试根据表单参数查询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);
})

2 个答案:

答案 0 :(得分:0)

您应该使用post方法而不是get
无法通过get请求发送正文。

将使用mime类型multipart/form-data发送正文 因此,您需要使用multer之类的中间件来解析它。

答案 1 :(得分:0)

您有3种主要选择。

选项1是使用带有GET请求的表单。 <input>值将附加到网址上,例如/word/?word=value。在服务器上你需要这样的东西:

app.get('/word', function(req, res) {
    console.log(req.query.word);
});

选项2是使用带有POST请求的表单,默认使用content-type enctype 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之类的网址,但这需要一些客户端JavaScript在提交<form>之前制作网址(假设网址依赖于<input>中的值,如果它不依赖于那么没问题)。在这种情况下,服务器将是:

app.get('/word/:quote', function(req, res) {
    console.log(req.params.quote);
});

请注意,3个选项中的每个选项都对解析后的数据使用不同的属性: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