Чтение ответа от Node JS Server

1

Я работаю над программой, в которой конкретный файл 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){
    });
    }

Ниже приведена ошибка, которую я хотел отправить в веб-браузер.

Изображение 174551

  • 1
    Вы отправляете {state:0, err: ...} , почему вы ожидаете волшебным образом получить его как {data: {state: 0, err: ...}} ? Удалить data. в res.data.state . Настоятельно рекомендуем поискать страницы справки для инструментов разработчика вашего браузера, чтобы вы могли посмотреть ответ и т. Д. Голосование закрывается как опечатка / невоспроизведение.
  • 0
    Я добавил err часть за {state} - res.json({ state : 0 ,err}); не следует ли посылать err вместе?
Показать ещё 2 комментария
Теги:

2 ответа

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

}
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
    res.json({ state : 0, err}); современный JavaScript для res.json({ state : 0, err: err}); любая смутно-свежая версия Node поддержит его. Если бы это не было поддержано, OP не получил бы признак, который они получают; они получат синтаксическую ошибку.
  • 0
    @edkeveked Вашего ответа дал мне представление о моих ошибках, err на стороне сервера была на самом деле не является правильной JSON объекта. Мне пришлось использовать err.toString() чтобы сначала преобразовать его и переслать. Затем я смог получить сообщение об ошибке. Я не знаю о соглашении, но res.err по-прежнему дает мне undefined то время как res.data.err смог разрешить объект ответа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню