如何在Node.js与Angular本地项目中正确调用SerpApi接口
问题修复步骤
- 1 修正路由重复拼接问题
你当前在server.js里通过app.use给路由加了前缀/seekSearchApi/serpapi.com/search.json,又在controller里给POST接口定义了相同的路径,最终实际生效的接口路径是两者拼接的结果,和你预期的完全不符。
修改方案:
把controller里的路由路径改成根路径:
// node-controller.js 修正路由定义 router.post('/', seekSearchApi);
修正后你的接口实际路径为/seekSearchApi/serpapi.com/search.json,请求方法为POST。
- 2 修正请求方法不匹配问题
你直接在浏览器地址栏输入URL发起的是GET请求,和你定义的POST接口不匹配,两种修改方案二选一:
方案一:继续用POST请求,用Postman、curl或者Angular的HttpClient.post方法发起请求,不能直接在浏览器地址栏访问。
方案二:把接口改成同时支持GET和POST,适配直接访问的场景:
// node-controller.js 改为支持两种请求方法 router.all('/', seekSearchApi);
- 3 修正参数硬编码与响应不返回问题
你当前代码里的查询参数是写死的,没有取前端传入的参数,且SerpApi回调里只打印了结果,没有返回给请求方,修改如下:
// node-controller.js 修正参数和返回逻辑 function seekSearchApi(req, res) { // 合并默认参数和请求传入的参数,请求参数优先级更高 const requestParams = Object.assign({}, params, req.query, req.body); search.json(requestParams, (data) => { // 把查询结果返回给前端 res.json(data); }); }
注意你初始化SerpApi的时候已经传了key,params里的api_key可以删掉,避免重复配置。
- 4 修正调用URL格式
修改后如果用GET请求调用,正确的URL如下,不要加多余的引号和逗号,空格要做URL编码:
http://localhost:3003/seekSearchApi/serpapi.com/search.json?q=Coffee&location=Austin,%20Texas,%20United%20States&hl=en&gl=us&google_domain=google.com
如果用POST请求调用,把参数放在请求体里即可。
内容的提问来源于stack exchange,提问作者Techdive
相关产品推荐
相关产品推荐

