我正在尝试使用node js服务将.json文件的内容转换为angularjs方法。但是出现以下错误:



这是相应的代码片段...

Angular Controller :注释行是我尝试过但失败的所有内容。

var currentProcess = "process_1cA";
$scope.storestats = [];
var resAss = $resource('/procs/getstorestats');
var stats = resAss.get({
  process: currentProcess,
  date: date.getFullYear() + "" + m + "" + d
});
stats.$promise.then(function(response) {
  if (response != undefined) {
    //    var r = JSON.parse(response);
    //$scope.storestats.push(r);
    //$scope.storestats.push(r);

    //var r = JSON.parse(response);
    $scope.storestats.push(response);
    //angular.forEach(r, function(value, key) {
    //    $scope.storestats.push({key : value});
    //});
  }
});

NODEJs服务:
httpApp.get('/procs/getstorestats', function(req, res, next) {

try {
    fs.readFile(cfg.routestatspath + "storestats-"+req.query.process + "-" + req.query.date + ".json", function (err, data) {
        var msgs1 = JSON.parse(data);
        //var r  = data.toString('utf8');
        var msgs2 = JSON.stringify(msgs1);
        console.log(msgs1);
        res.end(msgs1);
    });
}
catch (err) {
    res.end(err.toString());
}});

附言:注释掉的行是我尝试过但失败的行。另外, Node 服务代码段中的带注释的行没有出现错误,并且在登录时正确显示了该行,但是响应 Controller 时的数据为空白。

最佳答案

我在这里有点猜测,但是我认为您只需要在Node代码中将res.end()更改为res.send()。当您流式传输数据块时使用“end”方法,然后在完成所有操作后调用end()。 “发送”方法用于一次性发送响应,并让Node处理流。

另外,请确保您发送回一个字符串!

httpApp.get('/procs/getstorestats', function(req, res, next) {

  try {
    fs.readFile(cfg.routestatspath + "storestats-"+req.query.process + "-" + req.query.date + ".json", function (err, data) {
        var msgs1 = JSON.parse(data);
        //var r  = data.toString('utf8');
        var msgs2 = JSON.stringify(msgs1);
        console.log(msgs1);
        res.send(msgs2);  // NOTE THE CHANGE to `msg2` (the string version)
    });
  }
  catch (err) {
    res.send(err.toString());  // NOTE THE CHANGE
  }
});

09-18 20:32