Angular发起GET请求时Node.js后端获取查询参数的实现方法
修复方案
1. 确认Express路由配置正确
你在server.js中通过app.use('/seekSearchApi', require('./server/nodejs-serverapi'))挂载了路由,对应的./server/nodejs-serverapi文件内的路由必须定义为根路径,示例如下:
// ./server/nodejs-serverapi 示例代码 const express = require('express') const router = express.Router() // 此处路由必须为/,不可写为/seekSearchApi,否则会出现路径不匹配问题 router.get('/', seekSearchApi) module.exports = router
你可以先确认是否能正常打印Inside seekSearchApi,如果可以打印则说明路由匹配正常,跳过此步即可。
2. 直接使用Express内置查询参数解析获取值
Express默认会自动解析所有GET请求的查询参数,挂载到req.query全局对象上,无需手动引入url模块解析req.url,且挂载路由前缀后req.url会被修剪,手动解析容易出现参数丢失问题。修改applicationserver.js代码:
function seekSearchApi(req,res) { // 替换原有手动解析url的代码,直接取req.query console.log("req.query.q", req.query.q); console.log("Inside seekSearchApi");
修改后即可正常获取前端传递的q参数。
3. 修复axios调用第三方接口的传参写法
GET请求下axios不会将data字段的内容拼接到请求URL的查询参数中,必须使用params字段传递GET参数,修改对应代码:
axios({ method: 'get', url: 'https://serpapi.com/search.json', // 把data改为params params: { api_key: "xxxx", q: req.query.q, hl: "en", gl: "us", google_domain: "google.com" } }).then((response) => { // 直接用res.json返回响应即可,无需手动序列化 res.json(response.data) }, (error) => { console.log(error); res.status(500).send('请求失败') }); }
可选验证步骤
你可以在前端httpClient.get调用前打印params.toString(),确认参数是否正常拼接,排查前端传参问题。
内容的提问来源于stack exchange,提问作者Techdive
相关产品推荐
相关产品推荐

