Express.js搭配ScraperApi调用亚马逊商品接口报404及URI错误如何解决
问题原因
- 模板字符串语法错误:JavaScript 中支持变量插值的模板字符串必须使用反引号(
)包裹,你代码中baseUrl定义、request请求URL、控制台打印PORT这三处需要插值的位置全部错误使用了单引号,导致变量没有被实际解析,最终生成的请求URI是包含${}`占位符的无效地址,直接触发Invalid URI报错。 - 接口请求路径错误:你请求的
/error路由没有在代码中定义,当前服务端仅暴露了根路径/和商品查询路径/products/:productId,请求未定义的路径自然返回404状态码。 - 控制台出现的
Unchecked runtime.lastError报错属于浏览器端扩展异常,和当前Node.js服务端代码没有关联,多为浏览器安装的插件运行异常导致,可禁用无关插件后验证。
修复方案
修正后完整代码
const express = require('express'); const request = require('request-promise'); const app = express(); const PORT = process.env.PORT || 5000; const apiKey = '[你的实际ScraperApi密钥]'; // 原单引号替换为反引号,实现变量插值 const baseUrl = `http://api.scraperapi.com?api_key=${apiKey}&autoparse=true`; app.use(express.json()); app.get('/', (req, res) => { res.send('Welcome to Dentel API project'); }); // 获取商品详情接口 app.get('/products/:productId', async (req, res) => { const { productId } = req.params; try { // 原单引号替换为反引号 const response = await request(`${baseUrl}&url=https://www.amazon.com/dp/${productId}`); // 补充JSON解析,返回结构化数据 res.json(JSON.parse(response)); } catch (error) { // 错误返回添加状态码,方便前端识别 res.status(500).json({ message: '商品信息查询失败', error: error.message }); } }); // 原单引号替换为反引号 app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
关键修改点
- 将所有需要变量插值的字符串的包裹符号从单引号替换为反引号,确保
apiKey、productId等变量能被正确解析到目标字符串中。 - 请求接口时使用正确的路径:例如要查询ASIN为B09G9FPHY6的亚马逊商品,请求地址应为
GET http://localhost:5000/products/B09G9FPHY6,不要请求不存在的/error路径。 - 补充返回结果的JSON解析和错误状态码设置,优化接口的可用性。
内容的提问来源于stack exchange,提问作者FatokiTemi
相关产品推荐
相关产品推荐

