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