使用React / redux和Express将客户端参数传递到服务器端(EMPTY_RESPONSE错误)

时间:2016-09-07 20:44:10

标签: node.js express reactjs get

我想通过react / redux和express将一个变量从我的客户端传递到我的服务器端。在下面的示例中,我尝试传递VIEW_ID值以进行Google Analytics分析API调用。我一直试图按照here给出一些例子。启动我的应用程序并等待几分钟后,我遇到以下错误:

GET http://localhost:3000/gadata net::ERR_EMPTY_RESPONSE
dispatchXhrRequest @ bundle.js:34151xhrAdapter @ bundle.js:34003
bundle.js:31131  action @ 15:29:48.843 undefined 

我想我在谷歌分析API回调中遗漏了一些东西。

以下是我在VIEW_ID方法中将axios.get作为第二个参数传递的操作:

export const fetchgadata = () => (dispatch) => {
    dispatch({
        type: 'FETCH_DATA_REQUEST',
        isFetching:true,
        error:null
  });

var VIEW_ID = "ga:802840947";

return axios.get("http://localhost:3000/gadata", VIEW_ID)
    .then(response => {
      dispatch({
            type: 'FETCH_DATA_SUCCESS',
            isFetching: false,
            data: response.data.rows.map( ([x, y]) => ({ x, y }) )
      });
    })
    .catch(err => {
      dispatch({
            ype: 'FETCH_DATA_FAILURE',
            isFetching:false,
            error:err
      });
      console.error("Failure: ", err);
    });
};

这里是来自我的服务器文件的API调用:

app.use('/gadata', function(req, res, next) {

var VIEW_ID = req.query.VIEW_ID; 

var key = require('./client_id.json');

var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, ['https://www.googleapis.com/auth/analytics.readonly'], null);

var authorize = function( cb ) {
  jwtClient.authorize(function(err) {
    if (err) {
      console.log(err);
      return;
    } else {
      if ( typeof cb === "function") {
        cb();
      }
    }
  });
}
var queryData = function(req, res) {
  authorize(function() {
    analytics.data.ga.get({
      'auth': jwtClient,
      '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);
        return;
      }
      res.send(response);
    }); 
  });
}
});

1 个答案:

答案 0 :(得分:2)

CMIIW,我不认为你是如何通过axios传递查询字符串的。 尝试这样的事情(你可以在这里看到axios文档,https://github.com/mzabriskie/axios

axios.get(url, {params: {VIEW_ID: VIEW_ID}})
//or this
axios.get(url + '?VIEW_ID=' + VIEW_ID)