Node.js Express API报错:await仅在async函数中有效,求解决方法
修复Express中"await is only valid in async function"错误
错误原因很明确:你在uploadUserImage的回调函数里使用了await,但这个回调是普通函数,没有标记为async——外层的UploadImage是async不影响嵌套的内部函数,JS只认当前函数是否为async。
另外你的代码里还有个变量名笔误:定义了UserId但判断的是salonId,这会导致salonId未定义的错误,需要一并修正。
修复方案1:给回调函数添加async关键字
直接修改回调函数,加上async就能在里面用await了:
const UploadImage = async (req, res) => { uploadUserImage(req, res, async function(err) { // 这里添加async关键字 const file = req.file; const UserId = req.body.UserId; console.log(file); // 获取文件信息 if (!file) { return res.status(400).send({ message: '请上传文件。' }); } if(!UserId) { // 修正变量名,与定义的UserId统一 return res.status(400).send({ message: '请输入店铺ID' }); } const result = await User.addVendorGalleryImages(req.file.filename, UserId); res.end("文件已上传:" + req.file.filename); }); }
修复方案2:将回调函数转为Promise(推荐)
回调嵌套会让代码可读性变差,更推荐把uploadUserImage包装成Promise,用async/await统一处理异步逻辑:
// 先把uploadUserImage包装为Promise const uploadUserImagePromise = (req, res) => { return new Promise((resolve, reject) => { uploadUserImage(req, res, function(err) { if (err) { reject(err); } else { resolve(); } }); }); }; const UploadImage = async (req, res) => { try { await uploadUserImagePromise(req, res); const file = req.file; const UserId = req.body.UserId; console.log(file); if (!file) { return res.status(400).send({ message: '请上传文件。' }); } if(!UserId) { return res.status(400).send({ message: '请输入店铺ID' }); } const result = await User.addVendorGalleryImages(req.file.filename, UserId); res.end("文件已上传:" + req.file.filename); } catch (err) { // 统一处理上传过程中的错误 res.status(500).send({ message: '文件上传失败', error: err.message }); } }
内容的提问来源于stack exchange,提问作者Stuart
相关产品推荐
相关产品推荐

