ExpressJS将控制器对象返回给res.send



我有一个控制器,它进行 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())
});

最新更新