Вам необходимо разбираться в асинхронном программировании, либо вам нужно использовать callback
или Promise
, либо просто вызывать функцию res.send()
внутри функции listFiles
, следующий пример может помочь вам
router.get("/googleToken", function (req, res) {
// Function to retrieve forms after AUTH
function listFiles(auth) {
const drive = google.drive({
version: 'v3',
auth
});
drive.files.list({
q: "mimeType='application/vnd.google-apps.form'",
fields: 'nextPageToken, files(id, name)',
}, (err, res) => {
if (err) {
console.log('The API returned an error: ' + err);
return res.status(500).send(err);
}
var files = res.data.files;
if (files.length) {
return res.send(files);
} else {
console.log('No files found.');
return res.status(400).send({message: 'No files found.'});
}
});
}
var code = req.query.code;
oauth2Client.getToken(code, function (err, tokens) {
if (err) {
console.log(err);
return res.send(err);
} else {
oauth2Client.setCredentials(tokens);
listFiles(oauth2Client);
}
});
});
В следующем примере используется Promise
router.get("/googleToken", function (req, res) {
// Function to retrieve forms after AUTH
function listFiles(auth) {
return new Promise(function (resolve, reject) {
const drive = google.drive({
version: 'v3',
auth
});
drive.files.list({
q: "mimeType='application/vnd.google-apps.form'",
fields: 'nextPageToken, files(id, name)',
}, (err, res) => {
if (err) {
console.log('The API returned an error: ' + err);
return reject(err);
}
var files = res.data.files;
if (files.length) {
return resolve(files);
} else {
console.log('No files found.');
return reject({message: 'No files found.'});
}
});
});
}
var code = req.query.code;
oauth2Client.getToken(code, function (err, tokens) {
if (err) {
console.log(err);
return res.send(err);
} else {
oauth2Client.setCredentials(tokens);
listFiles(oauth2Client)
.then( function(files) {
res.send(files);
})
.catch( function(err) {
console.log(err);
res.send(err);
});
}
});
});