如何解决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
。
如果要使用req.body
,则需要将表单更改为POST请求而不是GET请求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。