我使用NodeJS,Express和GoogleApis和Google-oauth-jwt进行身份验证。
我在从第二个promise函数(getData)获取数据时遇到问题。
当我在getToken()中使用res.json(myToken)然后(function(myToken))时,我可以成功检索一个令牌。但是我在getData(令牌)函数中使用这个令牌时遇到了问题
当我终于能够通过getData函数从googleapis检索数据时,我想将这些数据保存到MongoDB中,以减少对Google Analytics API的调用。
这些是我得到的错误:
2018-01-11T09:46:55.063Z 5ac2c6f1-f6b4-11e7-a2e2-c50e9f880e28令牌:XXXXXXXXXXXXXXX
2018-01-11T09:46:55.148Z 5ac2c6f1-f6b4-11e7-a2e2-c50e9f880e28 {错误: 在新的RequestError处于RequestError.Error(native)时需要登录 (/var/task/node_modules/google-auth-library/lib/transporters.js:34:42) 在Request._callback (/var/task/node_modules/google-auth-library/lib/transporters.js:96:27) 在Request.self.callback (/var/task/node_modules/request/request.js:186:22)在emitTwo (events.js:106:13)在Request.emit(events.js:191:7)at 请求。 (/var/task/node_modules/request/request.js:1163:10)在emitOne (events.js:96:13)在Request.emit(events.js:188:7)at IncomingMessage。 (/var/task/node_modules/request/request.js:1085:12)代码:401,错误: [{domain:' global',reason:' required',message:' Login Required', locationType:'标题',位置:'授权' }]}
2018-01-11T09:46:55.153Z 5ac2c6f1-f6b4-11e7-a2e2-c50e9f880e28(节点:1)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):错误:需要登录
这是我的代码:
var express = require('express');
var router = express.Router();
var googleAuth = require('google-oauth-jwt');
var google = require('googleapis');
var app = express();
/* get GA data*/
router.get('/kpis', function(req, res, next) {
// get token with googleapis library
function getToken() {
return new Promise(function(resolve,reject) {
googleAuth.authenticate({
email: 'serviceAcountemail@email.com',
key: "getting key",
scopes: ['https://www.googleapis.com/auth/analytics.readonly']
}, function (err, token) {
if (err){
reject(err)
} else
resolve(token)
});
});
}
function getData(token){
return new Promise(function(resolve,reject){
var analytics = google.analytics('v3');
var VIEW_ID = 'ga:profileid';
analytics.data.ga.get({
'auth': token,
'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)
reject(err)
} else
console.log('Response:',response)
resolve(response)
});
});
}
getToken().then(function(myToken) {
// get the token, make a call to google analytics api with token included in auth
console.log('token:', myToken);
getData(myToken).then(function(results){
// show results on screen in json
res.json(gaResults);
});
});
});
/* end of get GA data*/
module.exports = router;
我的问题: