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

Javascript Express.js搜索表单未从api返回响应,javascript,express,post,get,amadeus,Javascript,Express,Post,Get,Amadeus,我正在尝试使用Amadeus api在Express中构建一个简单的搜索表单。我可以看到返回到控制台的数据,但单击我的index.js上的搜索按钮后,页面会不断显示http://localhost:3001/results/undefined?q=CPT&submit=无法解析。 请问我这里缺什么?如何访问键表单中的响应以构建结果页面?任何帮助都将不胜感激 app.js require('dotenv').config(); const createError = require('http-e

我正在尝试使用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;
结果:哈巴狗

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.
    });

  }};

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

但是,我认为您应该使用
req.query


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

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

但是,我认为您应该使用
req.query


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

非常感谢,我将
req.body.q
更改为
req.params.q
,它在控制台中生成
q=JHB submit=
,但不会将q传递给
res('results',
因此页面挂起,状态为400
data:undefined
@ZADorkMan,此错误可能是因为您没有从amadeus函数显式返回
数据(我也没有看到此变量的声明,所以您也应该添加此变量)。同样在您的
结果中。pug
,您在列表中定义变量
docs
,然后在
td
项中使用
doc
。如果您仍然有问题,我建议就这个特定问题提出一个新问题。谢谢@Phi12ip,我一直在努力,现在就开始尝试!非常感谢,我改变了
req、 body.q
to
req.params.q
,它在控制台中生成
q=JHB submit=
,但不会将q传递给
res('results',
因此页面挂起,状态为400
data:undefined
@ZADorkMan,此错误可能是因为您没有从amadeus函数显式返回
数据(我也没有看到此变量的声明,所以您也应该添加此变量)。同样在您的
结果中。pug
,您在列表中定义变量
docs
,然后在
td
项中使用
doc
。如果您仍然有问题,我建议就这个特定问题提出一个新问题。谢谢@Phi12ip,我一直在努力尝试!