Cloudinary图片上传成功但Node端触发catch错误求助
问题根源
Cloudinary Node SDK 的 upload_stream 回调函数参数顺序被写反了,正确顺序是**(error, result)**,而非你代码中的(result, error)。这导致上传成功时,你误将成功结果当作错误抛出,后端进入catch块返回500状态码,前端因此收到错误响应,而错误内容实际是Cloudinary的成功返回结果。
修复步骤
1. 修正后端streamUpload函数的回调参数顺序
修改 cloudinary.uploader.upload_stream 的回调逻辑,先判断错误,再处理结果:
let streamUpload = (req) => { return new Promise((resolve, reject) => { if (!req.file || !req.file.buffer) { return reject(new Error("No file provided or buffer is empty")); } // 修正回调参数顺序为(error, result) let stream = cloudinary.uploader.upload_stream( (error, result) => { if (error) { console.error('Error al subir la imagen a Cloudinary:', error); reject(error); } else { console.log("Result: ", result); console.log('Imagen subida a Cloudinary'); resolve(result); } } ); console.log('Subiendo imagen a Cloudinary...'); streamifier.createReadStream(req.file.buffer).pipe(stream); }); };
2. 前端axios请求优化(可选但推荐)
手动设置 Content-Type: multipart/form-data 会丢失自动生成的boundary分隔符,虽然当前后端能解析文件,但这是潜在问题。移除手动设置的headers,让axios自动处理:
await axios.post(`${VITE_PICTURES_API_HOST}/subirFoto`, formData);
验证修复
修改后重新测试:
- 后端会在Cloudinary上传成功后返回200状态码和预期的响应内容
- 前端axios请求会进入then块而非catch块,正常接收成功结果
内容的提问来源于stack exchange,提问作者NachoK66
相关产品推荐
相关产品推荐

