throw new ERR_INVALID_ARG_TYPE('chunk',['string','Buffer'],chunk);TypeError[ERR_INVALID_ARG_TYPE]:“chunk”参数必须是字符串或缓冲区类型

Rai*_*Rai 7 json node.js angularjs

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

_http_outgoing.js:700 throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); ^ TypeError [ERR_INVALID_ARG_TYPE]:“chunk”参数必须是字符串或缓冲区类型之一。在 ServerResponse.end (_http_outgoing.js:700:13) 接收到类型对象

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

角度控制器:注释行都是我尝试过但失败的行。

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});
    //});
  }
});
Run Code Online (Sandbox Code Playgroud)

NODEJ 的服务:

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());
}});
Run Code Online (Sandbox Code Playgroud)

PS:注释掉的行是我尝试过但失败的行。此外,节点服务代码片段中的注释行没有给出错误,并且在记录时正确显示,但响应控制器时的数据是空白的。

jak*_*lla 11

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

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

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
  }
});
Run Code Online (Sandbox Code Playgroud)


Rai*_*Rai 0

弄清楚了。需要进行 2 个小更改。其中之一是在控制器中,使用“$resource.query”而不是“$resource.get”。在服务中,正如 @jakarella 所说,必须使用 .end() 中的字符串化部分;

控制器:

                var resAss = $resource('/procs/getstorestats');
                var stats =  resAss.query({process: currentProcess, date: date.getFullYear() + "" + m + "" + d});
                stats.$promise.then(function (response) {
                    $scope.storestats.push(response);
                }
Run Code Online (Sandbox Code Playgroud)

节点服务:

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 msgs2 = JSON.stringify(msgs1);
        console.log(msgs2);
        res.end(msgs2);
    });
}
Run Code Online (Sandbox Code Playgroud)