部署解析简历的Node.js API遇403及未处理Promise拒绝警告
解决Render部署简历解析Node.js API的403及Promise拒绝问题
核心问题分析
你遇到两个关键问题:
- 403状态码:Eden AI API权限验证失败,请求被拒绝
- 未处理Promise拒绝警告:axios请求未捕获错误,触发Node.js警告
分步解决方法
1. 修复Eden AI API权限验证(解决403)
Eden AI的authorization请求头要求格式为Bearer [你的API密钥],你当前代码里的'Api key'是占位符,必须替换为实际密钥,且要通过环境变量安全存储(禁止硬编码到代码):
- 在Render控制台的服务设置中,添加环境变量
EDENAI_API_KEY,值为你的Eden AI密钥 - 修改代码中的headers部分:
headers:{ authorization: `Bearer ${process.env.EDENAI_API_KEY}`, // 移除手动设置的Content-Type,axios会自动处理multipart/form-data的boundary },
2. 捕获Promise错误(消除警告)
给axios请求添加.catch()块,处理请求失败的情况:
axios.request(options) .then((response) => { console.log(response.data); const data = JSON.stringify(response.data); console.log(data); }) .catch((error) => { // 打印详细错误信息,方便排查 console.error('请求失败:', error.response?.data || error.message); });
3. 适配Render的文件路径问题
你当前代码读取本地固定路径./Resume-Titouhi-Omar.pdf,在Render部署后:
- 确保该文件已上传到项目根目录,或使用绝对路径
- 更合理的做法是将API改为接收用户上传的文件(而非读取本地固定文件),示例修改(需配合Express框架):
const express = require('express'); const multer = require('multer'); const upload = multer(); const app = express(); const port = process.env.PORT || 3000; app.post('/parse-resume', upload.single('resume'), async (req, res) => { try { const form = new FormData(); form.append("providers", "affinda,hireability"); form.append("file", req.file.buffer, req.file.originalname); const options = { method: 'POST', url: 'https://api.edenai.run/v2/ocr/resume_parser', headers:{ authorization: `Bearer ${process.env.EDENAI_API_KEY}`, ...form.getHeaders() }, data: form }; const response = await axios.request(options); res.json(response.data); } catch (error) { res.status(error.response?.status || 500).json({ error: error.response?.data || error.message }); } }); app.listen(port, () => { console.log(`服务运行在端口 ${port}`); });
注意:使用上述代码需先安装依赖:
npm install express multer
Render部署额外配置
- 确保
package.json中有正确的start脚本,例如:"start": "node server.js"(对应你的主文件名) - 确认环境变量
EDENAI_API_KEY已正确设置 - 若使用固定简历文件,需确保该文件已上传至Git仓库并同步到Render
内容的提问来源于stack exchange,提问作者Omar
相关产品推荐
相关产品推荐

