我有一个控制器,该控制器进行api调用(延迟几秒钟),然后返回要发送的JSON对象,并显示在视图页面上。目前,我能够返回该对象并成功加载路线,但是该对象没有出现在我的浏览器页面上(状态代码:200),并且不确定是否可能丢失了该对象。下面提供的是我的路线和控制器。
控制器:
var express = require('express');
var apiRouter = express.Router();
var googleAnalytics = require('../google-analytics');
const { checkToken } = require("./components/token-validator");
apiRouter.use(checkToken);
apiRouter.get('/ga', function(req, res){
res.send(googleAnalytics())
});
module.exports = apiRouter;
控制器(googleAnalytics):
module.exports = () => {
console.log("google-analytics.js")
const {google} = require('googleapis');
const analyticsreporting = google.analyticsreporting('v4');
const view_id = '*view-id(';
... // resource: req information
analyticsreporting.reports.batchGet({
resource: req
}, (err, result) => {
if(err){
if(err.errors){
console.log(err.errors[0].message)
} else {
console.log(err)
}
} else {
return result.data;
}
//console.log("BREAK IN CONSOLE")
//console.log(err, result)
})
}
对象,例如:
{"reports":[{"columnHeader":{"dimensions":["ga:sourceMedium"],"metricHeader":{"metricHeaderEntries":
...
]}}
答案 0 :(得分:0)
您没有从google-analytics.js
返回任何信息。您需要使函数返回promise或使用回调。 analyticsreporting.reports.batchGet
返回了一个承诺,因此很容易做到。
module.exports = () => {
console.log("google-analytics.js")
const {google} = require('googleapis');
const analyticsreporting = google.analyticsreporting('v4');
const view_id = '*view-id(';
... // resource: req information
return analyticsreporting.reports.batchGet({
resource: req
});
}
现在,在您的/ga
路线中,您可以使用async-await
:
apiRouter.get('/ga', async function(req, res){
res.send(await googleAnalytics())
});