无法将数据从API请求发送到控制器

时间:2018-09-17 11:54:44

标签: angularjs node.js google-api mean-stack

我正在尝试从google驱动器中获取用户表单的列表。这是下面的代码(我的API中的GET请求):

checkZero

问题是设置凭据后,我试图通过listFiles函数将数据发送到我的控制器(AngularJS),该函数可以访问所有表单,但是它不发送任何响应。 不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

您需要了解异步编程,您需要使用callbackPromise或只是在res.send()函数中调用listFiles函数,下面的示例可能对您有所帮助< / p>

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);
            });
        }
    });
});