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

使用Google API上传文件时,回调函数中req未定义的问题求助

问题分析与解决方案

你遇到的问题是典型的作用域混淆:req对象是路由处理函数的局部变量,只在router.post("/files")的回调作用域里存在,你的insertDrive函数根本访问不到它。但你其实已经做对了第一步——把req.body.word和req.body.url提取成变量并传给了insertDrive,只是在insertDrive内部没有正确使用这些传入的参数,反而还在试图访问不存在的req。

具体修改步骤

只需要修改quickstart.js里的insertDrive函数,把里面所有的req.body.word替换成传入的word参数,req.body.url替换成传入的url参数即可:

修改后的quickstart.js代码:

module.exports.insertDrive = function (word, url) {
  folderId = 'some id';
  // 用传入的word参数代替req.body.word
  var fileMetadata = {
    'name': word,
    parents: [folderId]
  };
  // 用传入的url参数代替req.body.url
  var media = {
    mimeType: 'image/jpg',
    body: fs.createReadStream(url)
  };

  drive.files.create({
    resource: fileMetadata,
    media: media,
    fields: 'id'
  }, function (err, file) {
    if (err) {
      console.error(err);
    } else {
      console.log('File Id: ', file.id);
    }
    console.log("insert Drive finished =) !")
  });
}

为什么这样能解决问题?

你在路由里已经完成了从req.body提取数据的操作,并且通过函数参数把这些数据传递给了insertDrive。函数参数的核心作用就是让你能在不同的作用域之间传递数据,既然已经拿到了需要的word和url,就完全不需要再依赖req对象了。

你的router.js代码不需要修改,因为它已经正确地把数据传递给了insertDrive函数。

内容的提问来源于stack exchange,提问作者Diagathe Josué

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:45:43