2017-05-10 3 views
0

Ich bin sehr neu arbeiten mit Feathersjs (v2.0) und habe nur eine kleine REST-Anwendung, die nur eine Handvoll Datensätze mit Federn finden. Allerdings weiß ich nicht und ich habe keinen Weg gefunden, die Dokumentation und die Beispiele zu lesen, nur damit FIND nicht bekommen, setzen, löschen, etc. Gibt es eine Möglichkeit zu konfigurieren, welche Verben in einer feather-REST-API erlaubt sind ?. Ich versuchte, eine Funktion, in der vor dem Haken ablehnen hinzuzufügen (in der Servicehaken), die gerade eine Rückkehr, aber eine 500 Fehler zurückgegeben, und die Antwort ist:Federn erlaubt Verben Konfiguration

{"name":"GeneralError","message":"Cannot read property 'bind' of undefined","code":500,"className":"general-error","data":{},"errors":{}}

Der Standard (ohne Funktion in der Haken-Datei) für andere Verben ist:

"name":"NotFound","message":"No record found for id 'null'","code":404,"className":"not-found","errors":{}}

was Sinn macht, aber mein persönliches Gefühl ist, wenn man nicht diese Verben müssen, warum ich sie erlauben müssen und senden Sie dieses „irreführend“ Fehler?

UPDATE:

habe ich den Trick, aber ich bin nicht zufrieden, weil die Antwort-Header nicht mit überein, was tatsächlich passiert ist.

Um Header Informationen zu packen hatte ich diesen Code in der Servicedatei

// This must be before the service creation 
app.use(function(req, res, next) { 
    req.feathers.headers = req.headers; 
    next(); 
}); 

app.use('/myservice', createService(options)); 

auf der here gegebene Antwort basiert hinzuzufügen. Die Antwort von daffl, in der die Funktion auf dem Serviceerstellungsparameter steht, funktioniert jedoch nicht mit Code, der mit feathers-cli generiert wurde. Daher muss es vorher (besser noch?) Als zweiter oder erster Parameter in der createService-Funktion definiert werden ? Oder innerhalb des Optionsobjekts, ist es möglich? Ich bekomme nur Kompilierungsfehler). Ich hatte eine neue Datei mit der Hook-Funktion zu definieren und sie in „myservice.hooks.js“

module.exports = function() { 
    return function (hook) { 
    if(hook.method !== 'find' && hook.method !== 'error'){ 
     throw new Error('Method not allowed'); 
    }else{ 
     return hook; 
    } 
    }; 
}; 

Dies natürlich gibt einen 500-Fehler, sondern ein 405 Fehler mit den Zulassen-Header auf ‚GET ". Ich habe versucht, auch diesen Code stattdessen mit einem Fehler zu werfen:

hook.params.headers.allow = 'GET'; 
hook.params.headers.status = 405; 

es funktionierte besser, aber auf Löschen zum Beispiel geht es und versuchen, den Datensatz in der Datenbank zu löschen (zum Glück der Datenbankbenutzer nur über SELECT-Berechtigungen), aber Das sollte bei POST und PUT nicht so weit gehen. Nur dass der Antwort-Header-Status nicht 200 OK, sondern 400 (? !!) lautet und der Allow-Header nicht geändert wurde, ist also "GET, POST, PUT, PATCH, DELETE".

Ich lese this solution, aber ich weiß nicht, wie die Header-Werte korrekt mit feathers 'hook.params.headers (oder hook.header (s), aber es ist nicht definiert), um eine angemessenere Header-Antwort zurückzugeben und natürlich nicht weiter. Irgendwelche Ideen? Bitte sei gnädig, ich bin nur ein Anfänger mit Federn (weniger als eine Woche) und vielleicht ist das eine dumme/offensichtliche Frage.

Vielen Dank im Voraus.

+0

Bitte einzurichten als angenommen oder schreiben: Sie können ein 405 unter Verwendung des MethodNotAllowed Fehler und Ändern Haken werfen antworte und markiere es. Vielen Dank!:) – Alfabravo

Antwort

0

Um die richtigen Fehlercodes zu werfen, müssen Sie feathers-errors verwenden, wie in der errors API documentation beschrieben.

const errors = require('feathers-errors'); 

module.exports = function() { 
    return function (hook) { 
    if(hook.method !== 'find' && hook.method !== 'error'){ 
     throw new errors.MethodNotAllowed('Method not allowed'); 
    }else{ 
     return hook; 
    } 
    }; 
}; 

Vergessen Sie auch nicht die Antwort markieren entweder die Express Fehler Griff als pointed out in the same chapter

+0

Danke Daff, und sorry, aber ich habe Ihre Express-Fehler-Handle-Anweisungen nicht bekommen. Ich habe den Code vor "module.exports = app;" (app.js) und vor "app.hooks (appHooks);", kein Glück, wenn ich die Anwendung starte, wird dieser Fehler angezeigt: "throw new TypeError ('app.use() benötigt Middleware-Funktionen');". Im gerüsteten Code in der Middleware/index.js-Datei ist jedoch bereits der Express-Fehler am Ende, also war es schon da, um damit zu beginnen. Also, im Grunde weiß ich nicht, wo ich diesen Code, den ich denke, ist: "app.use (errorHandler());" mit der entsprechenden Anforderung in app.js – George

+0

Endlich finde ich es heraus, ich hatte eine andere Zeile, die ich irrtümlich in den Hook neu eingefügt eine andere const notFound .... Ich erkannte auch, dass die Middleware bereits den Handler haben, so dass es keine Notwendigkeit gibt für den Express-Error-Handler-Code festgelegt werden. – George

Verwandte Themen