我正在开发一个程序,在该程序中将在服务器端编译特定的Java文件,如果编译时出现任何错误,我将捕获错误信息并将其发送回客户端。但是,我已经尝试了很多方法来读取JSON对象,但无济于事。
所以我的问题是为什么我无法读取客户端服务器发送的错误字符串?我目前正在使用 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){
});
}
以下是我想发送到网络浏览器的错误
答案 0 :(得分: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){
});
答案 1 :(得分:0)
我的错误在于假设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});
}
);
}