我有一个控制器,它进行 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;
控制器(谷歌分析(:
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":
...
]}}
您不会从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())
});