ExpressJS调用Google Books API报错:Required parameter: q
解决Google Books API请求报错"Required parameter: q"的问题
这个错误一眼就能找到根源——你给Google Books API传的参数名称不对!
问题原因
Google Books的/volumes接口要求必填的查询参数是q,但你在代码里把参数名写成了query,接口根本识别不到这个参数,自然会返回400错误,提示你缺少必填的q参数。
修正后的代码
只需要把qs里的query改成q就可以正常请求了:
router.get('/google', async (req, res, next) => { request({ uri: 'https://www.googleapis.com/books/v1/volumes', qs: { api_key: process.env.GOOGLE_API_KEY, q: 'isbn:9781440346026' // 这里将query替换为q } }).pipe(res); });
额外小提示
- 你用
isbn:xxx的格式查询是完全正确的,确保ISBN编号没有输入错误即可; - 可以顺便检查下
process.env.GOOGLE_API_KEY是否正确加载了你的API密钥,虽然这次报错不是密钥问题,但后续如果有权限类问题也会影响返回结果; - 另外提一句:
request库已经被官方标记为废弃状态了,新项目可以考虑用axios或者node-fetch这类更现代的HTTP客户端,代码会更简洁易维护,比如用axios的写法:
const axios = require('axios'); router.get('/google', async (req, res, next) => { try { const response = await axios.get('https://www.googleapis.com/books/v1/volumes', { params: { api_key: process.env.GOOGLE_API_KEY, q: 'isbn:9781440346026' } }); res.json(response.data); } catch (error) { next(error); } });
内容的提问来源于stack exchange,提问作者user2799827
相关产品推荐
相关产品推荐

