我想将通过谷歌驱动API获取的文件列表(obj
)传递给EJS文件。如何在回调函数中访问app.get的'response'参数
即我想写
app.get('/',function(req,res){
res.render('index',obj);
}
的问题是,我发现了JS通过几个回调函数的对象。 该功能被称为
fs.readFile('client_secret.json',processClientSecrets);
这反过来又来电,
function processClientSecrets(err,content) {
if (err) {
console.log('Error loading client secret file: ' + err);
return;
}else{
authorize(JSON.parse(content),findFiles);
}
}
这就要求这两个,
function authorise(credentials,callback) {
var clientSecret = credentials.installed.client_secret;
var clientId = credentials.installed.client_id;
var redirectUrl = credentials.installed.redirect_uris[0];
var auth = new googleAuth();
var oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);
// Check if we have previously stored a token.
fs.readFile(TOKEN_PATH, function(err, token) {
if (err) {
getNewToken(oauth2Client, callback);
} else {
oauth2Client.credentials = JSON.parse(token);
callback(oauth2Client);
}
});
}
[编辑]
function findFiles(auth){
var obj ={};
var key = 'files';
obj[key]=[];
var drive = google.drive('v3');
drive.files.list({
auth: auth,
folderId: '****************',
q: "mimeType contains 'application/pdf' and trashed = false"
},
function(err,response){
var f = response.files;
if (f.length == 0) {
console.log('No files found.');
}else {
var i;
for (i = 0; i < f.length; i++) {
var file = f[i];
//console.log('%s (%s)', file.name, file.id);
obj[key].push(file.name + ' ' + file.id);
}
console.log(obj);
return obj;
}
});
}
这看起来像一个非常基本的问题,但是我不能解决它,因为node.js本质上是异步的,我所有返回obj的尝试都会在检索obj之前渲染它。
控件到达readFile然后进入授权(我可以记录授权返回的对象),但在此之后它会捕获错误。 :( – AlwaysHungrie