使用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é
相关产品推荐
相关产品推荐

