私は初心者ですので、できる限り最善の方法で問題を公開します。私は、サーバーサイドでGoogleアナリティクスAPIを呼び出して、反応とd3を使用してクライアント側にいくつかのデータを表示しようとしています。ここではGAのAPIを呼び出す私のスクリプトは次のとおりです。私は独立してこのスクリプトを呼び出す場合Node、Express、GoogleアナリティクスAPIを使用したコールバック地獄で失われた
var google = require ("googleapis");
var key = require ('./client_id.json');
const VIEW_ID = 'ga:80820965';
let jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
['https://www.googleapis.com/auth/analytics.readonly'],
null
);
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
}
let analytics = google.analytics('v3');
queryData(analytics);
});
var queryData = function(analytics) {
analytics.data.ga.get({
'auth': jwtClient,
'ids': VIEW_ID,
'metrics': 'ga:uniquePageviews',
'dimensions': 'ga:pagePath',
'start-date': '30daysAgo',
'end-date': 'yesterday',
'sort': '-ga:uniquePageviews',
'max-results': 10,
}, function (err, response) {
if (err) {
console.log(err);
return;
}
console.log(JSON.stringify(response, null, 4));
});
}
module.exports = {
queryData
};
すべてが、私は次のエラーを持っている私のプロジェクト全体でそれを呼んでいるがとき、罰金です:
[1] analytics.data.ga.get({
[1] ^
[1]
[1] TypeError: Cannot read property 'data' of undefined
analytics
が定義されていないため、data
は未定義です。そしてanalytics
は、この呼び出しため、未定義である:
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
}
let analytics = google.analytics('v3');
data = queryData(analytics);
});
は、非同期呼び出しです。私は、client_idがロードされる時を推測します。
let analytics = google.analytics('v3');
data = queryData(analytics);
準備ができている:queryData
がこの部分はときにのみ実行されているように
は、どのように私は、このスクリプトを書くことができますか?
私の問題がはっきりしていて、意味をなさないことを願っています。私はasync/awaitモジュールについて読んだことがあります。しかし、私はそれを自分のものとして使うことはできません。
編集#1:私はこのようなものを使用する必要がありますが、私は
module.exports = {queryData: function (err, req, res, next) { next(); }};
ありがとうございます。私は今、自分の問題を本当に理解しています。しかし、私はあなたのコードを試して、次のエラーを取得しました。 '未定義のrefreshToken_'プロパティを読み込めません。 –
@SimonBreton、問題ありません。私は知らない、私は上記のコードをテストしていない。私はちょうどこのタイプの状況のためにかなり一般的なパターンを実装しましたが、スタックトレースを調べて、そのエラーがどこから来ているのかを調べなければならないかもしれません。申し訳ありませんが、私はもっと助けになることはできませんでした。あなたが進むにつれて他の質問があれば教えてください... –
あなたは 'authorizationPromise'コードに関するもう少し詳細を教えてください。私は特に 'tokens'変数の使用を理解していません。ありがとう。 –