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;

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;

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

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

但是,我认为您希望使用req.query

快速需求查询文档

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

最新更新