2016-05-23 3 views
1

Meine API mit Express.js implementiert json als normale Antwort zurückgibt, aber wenn ein Fehler aufgetreten ist, gibt Fehlercode mit einem Klartext, indem man einfach res.sendStatus(401) aufrufen.ngResource transformResponse wie beide Fehler und normale Daten zu handhaben

Dies verursacht ein Problem auf meinem Frontend, ich Winkel ngResoruce verwenden, und der Ressource-Code ist wie folgt aus:

svc.authenticateApi = function() { 
      return $resource(apiEndpoint + 'authenticate', null, { 
       'save': { 
        method: 'POST', 
        transformResponse: function (data, header) { 
         console.log("transformResponse, header:", header()); 
         console.log("transformResponse, data:", data); 

         return { data: angular.fromJson(data) }; 
        }, 
       }, 
      }); 
     }; 

Dies funktioniert gut, wenn die normalen JSON-Daten jedoch zurückgegeben werden, wenn Fehlerstatus zurückgegeben wird, der data Parameter ist kein serialisierten JSON-String, dann ist es einfacher Text, und ich bekomme Fehler wie folgt aus:

enter image description here

Anscheinend transformResponse versucht Text zu analysieren Unauthorised als JSON und fehlgeschlagen. Ich kann durch das Senden jede Fehlerreaktion als JSON auf dem Server Ende dieses Problem umgehen, indem so etwas wie `res.status (401) .send Aufruf ({Fehler:„Unauthorized“}, aber das fühlt sich an wie ein Hack, und ich weiß nicht Ich möchte den Fehlertext für jeden Statuscode manuell wiederholen

Gibt es einen besseren Weg, damit umzugehen? Ich will nicht, dass es klingt wie eine Ratte, aber ngResource-Dokument ist wirklich schlecht und ich denke, mit $ http ist eine viel bessere Lösung.

Antwort

0

Ich bin von $ ressource weggezogen und verwende $ http überall. Ich finde nur alles über $ ressource ein bisschen wackelig. Ich denke, die Rückkehr JSON vom Server in allen Szenarien klingt wie obwohl der beste Ansatz. Sie könnten einen benutzerdefinierten Handler implementieren Ihre eingehenden Antworten zu testen, dies zu umgehen, aber das ist nicht wirklich rig fühlen ht zu mir.

Ich würde vermuten, dass der Fehler bei der Rückkehr auftritt {Daten: angular.fromJson (Daten)}; Linie aber. Sie könnten dies auch in einen Versuch/Fang einpacken.

0

Ich fand Erfolg nach dem Vorschlag von Mike Feltman, um die fromJson Anruf in eine try/catch zu wickeln. Die Idee ist, wenn es einen Fehler gibt, ist es nicht nötig, die Antwort zu transformieren.

function transformIgnoringErrors(original) { 
    var data; 

    try { 
     data = angular.fromJson(original); 
     /* code to perform transformation */ 
    } catch (err) { 
     /* return what came in because no need to transform */ 
     data = original; 
    } 
    return data; 
} 
Verwandte Themen