Я работаю над программой, в которой конкретный файл Java будет скомпилирован на стороне сервера, и если в компиляции возникнет какая-либо ошибка, я запишу информацию об ошибке и отправлю ее обратно на клиентскую сторону. Тем не менее, я пробовал много способов прочитать JSON Object, но безрезультатно.
Поэтому мой вопрос в том, почему я не смог прочитать строку ошибки, отправленную сервером на стороне клиента? В настоящее время я использую res.data.err, чтобы прочитать мой ответ об ошибке.
Код сервера
var cmd=require('node-cmd');
exports.compileTest = function(req,res){
console.log(req.body.data.fileName);
var file = req.body.data.fileName;
var output = "";
output = cmd.get(
'javac solutionTest/'+file,
function(err, data, stderr){
if (err) {
console.log(err);
res.json({ state : 0 ,err});
}
else
res.json({ state : 1});
}
);
}
Код стороны клиента
$scope.compileSol = function(){
$http.post('/testRun', { data : { fileName : $scope.solutionFileName.name}
}).then(function(res){
if(res.data.state==0){
alert(res.data.err);
}
}).catch(function(error){
});
}
Ниже приведена ошибка, которую я хотел отправить в веб-браузер.
Моя ошибка заключается в том, что err
- это точная ошибка, выдаваемая сервером.
Решение состоит в том, чтобы преобразовать его в String, а затем отправить его.
var cmd=require('node-cmd');
exports.compileTest = function(req,res){
console.log(req.body.data.fileName);
var file = req.body.data.fileName;
var output = "";
output = cmd.get(
'javac solutionTest/'+file,
function(err, data, stderr){
if (err) {
console.log(err);
//added this line
err = err.toString();
res.json({ state : 0 ,err:err});
}
else
res.json({ state : 1});
}
);
}
Я полагаю, что ваша переменная err
которую вы отправляете с вашего сервера, представляет собой объект JSON, который имеет для ключа: err
. Если нет, вы можете рассмотреть возможность его изменения, как я это делаю ниже.
if (err) {
console.log(err);
res.json({ state : 0 ,err: err});
}
else
res.json({ state : 1});
}
Ответ объекта на стороне клиента должен иметь ту же форму, что и вы его отправили. В способе, которым вы отправляете его со своего сервера, таким образом вы можете получить доступ к нему на стороне клиента:
if(res.state==0){
alert(res.err);
}
}).catch(function(error){
});
res.json({ state : 0, err});
современный JavaScript для res.json({ state : 0, err: err});
любая смутно-свежая версия Node поддержит его. Если бы это не было поддержано, OP не получил бы признак, который они получают; они получат синтаксическую ошибку.
err
на стороне сервера была на самом деле не является правильной JSON объекта. Мне пришлось использовать err.toString()
чтобы сначала преобразовать его и переслать. Затем я смог получить сообщение об ошибке. Я не знаю о соглашении, но res.err по-прежнему дает мне undefined
то время как res.data.err смог разрешить объект ответа.
{state:0, err: ...}
, почему вы ожидаете волшебным образом получить его как{data: {state: 0, err: ...}}
? Удалитьdata.
вres.data.state
. Настоятельно рекомендуем поискать страницы справки для инструментов разработчика вашего браузера, чтобы вы могли посмотреть ответ и т. Д. Голосование закрывается как опечатка / невоспроизведение.err
часть за{state}
-res.json({ state : 0 ,err});
не следует ли посылатьerr
вместе?