从Node JS Server读取响应

时间:2017-11-05 14:26:23

标签: javascript json node.js

我正在开发一个程序,在该程序中将在服务器端编译特定的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){
    });
    }

以下是我想发送到网络浏览器的错误

enter image description here

2 个答案:

答案 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});
      }
    );

}