expressjs返回控制器对象到res.send

时间:2019-07-25 15:41:49

标签: node.js express

我有一个控制器,该控制器进行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":
...
]}}

1 个答案:

答案 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())
});