You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:08:12