微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Express.js搜索表单未从api返回响应

如何解决Express.js搜索表单未从api返回响应

我正在尝试使用Amadeus api在Express中构建一个简单的搜索表单。我可以看到返回到控制台的数据,但是单击index.js上的搜索按钮后,页面会不断给我http://localhost:3001/results/undefined?q=CPT&submit=并无法解析。 我在这里想念什么?如何以键的形式访问响应以构建结果页面?任何帮助将不胜感激!

app.js

require('dotenv').config();
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');

const indexRouter = require('./routes/index');
const postRouter = require('./routes/post');
const resultsRouter = require('./routes/results');
const usersRouter = require('./routes/users');

const app = express();
app.set('views',path.join(__dirname,'views'));
app.set('view engine','pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname,'public')));

app.use('/',indexRouter);
app.use('/',postRouter);
app.use('/',resultsRouter);
app.use('/users',usersRouter);

module.exports = app;

Index.js

extends layout

block content
  h1= title
  div.container-fluid
    div.row.justify-content-center
        p Find Your Dream Kruger Safari Package!
          form.form-inline.my-2.my-lg-0#searchBox(
                action='/results/' +   q
                method='GET'
                )
                  input.form-control.mr-sm-2(type='text',placeholder='City Code ie. LON,JHB,CPT',aria-label='Search',id='q' name='q' required)
                  button.btn.btn-success.my-2.my-sm-0(type='submit' id='submit' name="submit") Search   

results.js

const express = require('express');
const router = express.Router();

router.get('/results/:q',(req,res) => {
  const q = req.query.q;
  // const result = ;
  // q = JSON.stringify(q);
  // console.log(result);
  const searchAmadeus = require('../controllers/amadeusControl.js');
  searchAmadeus.findNew(q,(err,docs) => {
    if (!err) {
      res.render('results',{
        title: 'We Found Some Great Deals',list: docs,});
    } else {
      console.log('Error  finding record :' + err);
    }
  });
});

module.exports = router;

post.js

const express = require('express');
const router = express.Router();

    router.post('/results/:q',function(req,res) {
      const q = req.body.q;
      res.send(q);
      // res.send(q);
      //console.log(q);
    });
    
    module.exports = router;

results.pug

extends layout

block content
  h1= title
  p Results  
  div.find test #{body}
  div.container
    div.row
      div.col-sm
        p left col content
      div.col-sm
        tbody
          each docs in list
            tr
              td= doc

amadeusControl.js

module.exports = {
  findNew: function(q) {
    // const bodyParser = require('body-parser');
    // initialize the client and authenticate
    const Amadeus = require('amadeus');
    // console.log(process.env.AMADEUS_CLIENT_ID);
    const amadeus = new Amadeus({
      'clientId': process.env.AMADEUS_CLIENT_ID,'clientSecret': process.env.AMADEUS_CLIENT_SECRET,});

    // Get list of Hotels by city code
    amadeus.shopping.hotelOffers.get({
      cityCode: q,}).then(function(response) {
      // console.log(response.body); // => The raw body
      console.log(response.result); // => The fully parsed result
      // console.log(response.data); // => The data attribute taken from the result
      docs = response.result;
    }).catch(function(error) {
      console.log(error.response); // => The response object with (un)parsed data
      console.log(error.response.request); // => The details of the request made
      console.log(error.code); // => A unique error code to identify the type of error      // END Do something with the returned data.
    });

  }};

解决方法

首先,您将使用:q对象而不是req.params访问req.body参数。

但是,我认为您想改用req.query

Express req.query docs

如果要使用req.body,则需要将表单更改为POST请求而不是GET请求。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。