为什么此表单提交未按预期发送输入值?我正在使用PUG模板,可以通过执行http://localhost:3000/search/searchValue
(searchValue是在搜索框上输入的搜索字符串)返回期望的结果,但似乎可以正确地发布数据。
我可以使用http://localhost:3000/search/searchValue
返回结果,但无法获取searchValue传递给控制器。
我已经尝试过这样编辑控制器(正在返回[object object]),但是没有运气。我想念什么?
我在控制器中尝试过编辑以更改为字符串
let query = req.params.q;
query = JSON.stringify(query);
result = {email: query} && {fullName: query};
我还尝试将const query = req.params.q;
编辑为const query = res.send.q;
,这会返回JSON回复`
我尝试过这个
const query = req.params.q;
query = JSON.stringify(query);
let result = res.send( query );
result = {email: query} && {fullName: query};
原始控制器
router.get('/search/:q', (req, res) => {
const query = req.params.q;
result = {email: query} && {fullName: query};
console.log(result);
Booking.find(result, (err, docs) => {
if (!err) {
res.render('results', {
viewTitle: 'Search Results',
results: docs,
});
console.log(result);
} else {
console.log('Error finding record :' + err);
}
});
});
layout.pug
form.form-inline.my-2.my-lg-0#searchBox(
method='post'
action='/search/' + result
)
input.form-control.mr-sm-2(type='text', placeholder='Search', aria-label='Search', id='q' name='q' value=''
)
button.btn.btn-outline-success.my-2.my-sm-0(type='submit' id='submit') Search
结果
each doc in results
-var id = doc._id;
tr
td
a(data-toggle="popover" title="Users ID" data-content= doc._id
)
b= doc.fullName
td= doc.email
td= doc.mobile
td= doc.city
td
更新
我将代码编辑为以下内容,当手动输入http://localhost:3000/search/myquery
之类的URL时可以使用,但是现在我得到http://localhost:3000/search/undefined
,并且页面只有空白,只有查询值。
router.get('/search/:q', (req, res) => {
const q = req.params.q;
const result = {$or: [{fullName: {$regex: q}}, {email: {$regex: q}}]};
console.log(result);
Booking.find(result, (err, docs) => {
if (!err) {
res.render('results', {
viewTitle: 'Search Results',
results: docs,
});
res.sendFile('views/results');
console.log(query);
} else {
console.log('Error finding record :' + err);
}
});
});
router.post('/search/:q', function(req, res) {
const q = req.body.q;
res.send(q);
console.log(q);
});
非常感谢!
如果您尝试从查询参数中提取电子邮件和全名,那么这是错误的result = {email: query} && {fullName: query};
,还请检查您声明的路由URL。查看更多here
或尝试一下:
router.get('/search/:q', (req, res) => {
const { email, fullName } = req.query;
const q = req.params.q;
// do what you need
const result = {
email: email,
fullName: fullName
}
});
然后,在呼叫此路由时,尝试使用类似'/search/:q?email=bla@bla&fullName=bla'
的网址