Я пытаюсь получить содержимое файла .json
с помощью службы узла js в метод angularjs. Но я получаю следующую ошибку:
_http_outgoing.js: 700 throw new ERR_INVALID_ARG_TYPE ('chunk', ['string', 'Buffer'], chunk); ^ TypeError [ERR_INVALID_ARG_TYPE]: аргумент "chunk" должен иметь тип string или Buffer. Полученный объект типа на 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});
//});
}
});
Служба 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());
}});
P.S: Закомментированные строки - те, с которыми я пробовал и потерпел неудачу. Кроме того, закомментированные строки в фрагменте кода службы узла не дают ошибок, и при регистрации они отображаются правильно, но данные при ответе контроллеров пустые.
5 ответов
Догадаться. Потребовалось 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);
}
Узел Сервис:
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);
});
}
Я предполагаю немного здесь, но я думаю, что вам просто нужно изменить res.end()
на res.send()
в вашем коде Node. Метод end используется при потоковой передаче фрагментов данных, а затем вы вызываете end()
, когда все готово. Метод «send» предназначен для отправки ответа за один раз и позволяет 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
}
});
У меня была похожая ошибка. Это было потому, что я передавал process.pid в res.end (). Это сработало, когда я изменил process.pid на string
res.end(process.pid.toString());
Если вы используете библиотеку «запрос-обещание», установите json
var options = {
uri: 'https://api.github.com/user/repos',
qs: {
access_token: 'xxxxx xxxxx'
},
headers: {
'User-Agent': 'Request-Promise'
},
json: true // Automatically parses the JSON string in the response
};
rp(options)
.then(function (repos) {
})
.catch(function (err) {
});
Спасибо user6184932, все работает
try {
await insertNewDocument(fileNameDB, taskId);
res.end(process.pid.toString());
} catch (error) {
console.log("error ocurred", error);
res.send({
"code": 400,
"failed": "error ocurred"
})
}
Похожие вопросы
Новые вопросы
angularjs
Используйте для вопросов об AngularJS (1.x), JavaScript-фреймворке с открытым исходным кодом. НЕ используйте этот тег для Angular 2 или более поздних версий; вместо этого используйте тег [angular].