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