我试图从google drive获取用户表单的列表。这是下面的代码(我的API中的GET请求):
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) return console.log('The API returned an error: ' + err);
var files = res.data.files;
// Callback function to return files
function callback() { return files; };
if (files.length) {
// CALL callback to return data
callback();
} else {
console.log('No files found.');
}
});
}
var code = req.query.code;
oauth2Client.getToken(code, function (err, tokens) {
if (err) {
console.log(err);
res.send(err);
return;
}
else {
oauth2Client.setCredentials(tokens);
var forms = listFiles(oauth2Client);
res.send(forms);
}
});
});
问题是在设置凭据之后我试图通过listFiles函数将数据发送到我的控制器(AngularJS),该函数访问所有表单,但它不会发送任何响应。任何帮助或暗示赞赏。谢谢提前。
您需要了解异步编程,要么需要使用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);
});
}
});
});