使用JavaScript+Express调用API时出现Object not found错误求助
问题排查与解决方案
以下是几个可能导致"Object not found"错误的核心排查点及修复方案:
1. 静态文件服务的路径问题
你使用了相对路径./public配置静态文件服务,但Node.js的相对路径是基于启动服务时的工作目录,而非index.js所在目录。一旦启动服务的位置不是项目根目录,就会找不到public文件夹。改成绝对路径更稳妥:
import express from "express"; import path from "path"; // 引入path模块 const app = express(); // 用绝对路径指向public目录 app.use('/', express.static(path.resolve(__dirname, './public')))
2. 服务启动的端口问题
检查process.env.PORT是否有正确赋值。如果环境变量未设置,app.listen可能启动失败或使用默认端口但你没注意到。给端口加个默认值:
const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Express is now Live on port ${PORT}.`) });
确保控制台能正常输出启动日志,确认服务已成功运行。
3. 前端请求的错误处理
当前前端代码未处理HTTP错误状态(比如404),只要响应状态不是2xx,response.json()就会抛出错误,可能被你看到的"Object not found"信息掩盖。修改script.js添加错误捕获:
const getData = async () =>{ console.log('Hello from script.js') try { const response = await fetch('/api/ethereum') if (!response.ok) { throw new Error(`请求失败,状态码: ${response.status}`); } const data = await response.json() console.log(data) } catch (err) { console.error('请求出错:', err); } } getData()
这样能精准定位是后端返回404,还是其他请求层面的问题。
4. 后端API的错误处理
后端调用Random User API时也未做错误捕获,若该API请求失败,后端会直接返回错误响应或崩溃。给后端接口加上错误处理:
app.get("/api/ethereum", async (req, res) => { try { let url = new URL('https://randomuser.me/api/') const response = await fetch(url.href) if (!response.ok) { throw new Error(`第三方API请求失败: ${response.status}`); } const data = await response.json() res.send(data) } catch (err) { console.error('后端接口错误:', err); res.status(500).send({ error: '服务器内部错误' }); } });
优先排查静态文件路径和服务启动状态,这是导致前端请求404最常见的原因。
内容的提问来源于stack exchange,提问作者schmurdock
相关产品推荐
相关产品推荐

