无法将来自 API 请求的数据发送到控制器
Cannot Send Data from API request to Controller
我正在尝试从 google 获取用户表单列表 drive.Here 是下面的代码(我的 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),但是它没有发送任何响应。
提前提供任何帮助或提示 appreciated.Thanks。
您需要了解异步编程,您需要使用 callback
或 Promise
或简单地在 listFiles
函数中调用 res.send()
函数,以下示例可能会有所帮助你
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);
});
}
});
});
我正在尝试从 google 获取用户表单列表 drive.Here 是下面的代码(我的 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),但是它没有发送任何响应。 提前提供任何帮助或提示 appreciated.Thanks。
您需要了解异步编程,您需要使用 callback
或 Promise
或简单地在 listFiles
函数中调用 res.send()
函数,以下示例可能会有所帮助你
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);
});
}
});
});