2016-06-10 2 views
1

Я делаю вызов api извлечения, но в случае ошибки 500 следующее промежуточное ПО запускает и отправляет обратно объект json в тело ответа.Как я могу получить фактическую ошибку из fetch api

app.Use(async (context, next) => 
     { 
      try 
      { 
       await next(); 
      } 
      catch (Exception ex) 
      { 
       if (context.Response.HasStarted) 
       { 
        throw; 
       } 
       context.Response.StatusCode = 500; 
       context.Response.ContentType = "application/json"; 
       var json = JToken.FromObject(ex); 
       await context.Response.WriteAsync(json.ToString()); 
      } 
     }); 

На стороне клиента У меня есть следующий код

return fetch(url, content) 
    .then(function(res) { 
     if (!res.ok) { 
      console.log(res, res.json()) 
      throw Error(res.statusText); 
      } 
     return res; 
     }) 
    .then(res => res.json()) 
    .catch(e => console.log('Error fetching accounts:', e)) 

Я не в состоянии получить доступ к JSON с информацией об ошибке. Как мне это сделать ?

Работы кода после того, как после правильного ответа

return fetch(url, content) 
     .then(function(response) { 
      if (!response.ok) { 
       return response.json() 
        .then(function(obj) { 
         throw Error(obj.ErrorMessage) 
        }) 
      } 
      else { 
       return response.json() 
           .then(json => { 
            /*further processing */ 
           }) 
      } 
     }).catch(/* work with the error */) 

ответ

2

В json функции Response объекта возвращает обещание, а не фактическое значение разобранного.

res.json() 
.then(function(object) { 
    // Here you have the parsed JSON object. 
    console.log(object); 
}); 
+0

Спасибо за помощь, сейчас он работает. Я обновил рабочий код, но я чувствую, что его можно реорганизовать дальше. Какие-либо предложения ? – Akhil

+0

Я думаю, что решение, которое вы предложили, неплохое. Существуют и другие варианты (например, https://pastebin.mozilla.org/8876465), но мне нравится ваш. – Marco

+0

Я смог использовать некоторые лямбда, чтобы сократить это, еще раз спасибо! – Akhil

Смежные вопросы