JS搜索框提交未发送值-返回未定义或[Object,Object]

问题描述 投票:0回答:1

为什么此表单提交未按预期发送输入值?我正在使用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);
});

非常感谢!

javascript node.js forms pug submit
1个回答
0
投票

如果您尝试从查询参数中提取电子邮件和全名,那么这是错误的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'的网址

© www.soinside.com 2019 - 2024. All rights reserved.