2016-06-14 13 views
1

I geschaffene Funktion durch Befehl des Serverless Rahmen unten:Wie kann ich genaue Fehler Statuscode und Nachricht von Serverless Framework reagieren?

sls function create some/api 

Dann schelton Code erstellt wurde:

s-function.json:

'use strict'; 

module.exports.handler = function(event, context, cb) { 
    return cb({ 
    message: 'Go Serverless! Your Lambda function executed successfully!' 
    }); 
}; 

und Antwortvorlage wie unten

"responses": { 
    "400": { 
     "statusCode": "400" 
    }, 
    "default": { 
     "statusCode": "200", 
     "responseParameters": {}, 
     "responseModels": { 
     "application/json;charset=UTF-8": "Empty" 
     }, 
     "responseTemplates": { 
     "application/json;charset=UTF-8": "" 
     } 
    } 
    } 

Aber, wenn ich Fehler Objekt Callback-Funktion wie cb(err, null) zurückgegeben, dann wurde Fehlermeldung korrekt angezeigt, aber status ist 200.

Wenn ich wie cb("400", err) Callback-Funktion aufrufen geändert, dann kehrt status richtig 400, aber Antwort Körper nicht gut: {"errorMessage":"400"}.

Gibt es irgendwelche guten Einstellungen, um bot statusCode (Nicht nur 400, sondern auch 401,403,404,500 ... und so weiter) und Fehlermeldungen anzuzeigen?

+0

Angenommen, Sie API-Gateway unter Verwendung der Lambda-Funktionen freizulegen, gibt es eine gute Diskussion hier: http://stackoverflow.com/questions/31329495/is-there-a-way-to-change-the -http-status-codes-zurückgegeben-von-amazon-api-gateway/31371862 –

+0

Vielen Dank! Es ist nicht meine Vorstellung, aber damit kann ich mein Problem auf andere Weise lösen. Ich werde das Ergebnis später zusammenfassen. – kochizufan

+0

Ausgezeichnet! Ich freue mich auf Ihre Ergebnisse. –

Antwort

1

Ich verwende folgende Antwortvorlage. Wenn die von der Lambda-Funktion zurückgegebene Nachricht mit der in der Antwortvorlage angegebenen Nummer selectionPattern übereinstimmt, wird der korrekte Statuscode zurückgegeben.

"responseTemplate": { 
    "400": { 
     "selectionPattern": "^\\[BadRequest\\].*", 
     "statusCode": "400" 
    }, 
    "401": { 
     "selectionPattern": "^\\[Unauthorized\\].*", 
     "statusCode": "401" 
    }, 
    "403": { 
     "selectionPattern": "^\\[Forbidden\\].*", 
     "statusCode": "403" 
    }, 
    "404": { 
     "selectionPattern": "^\\[NotFound\\].*", 
     "statusCode": "404" 
    }, 
    "409": { 
     "selectionPattern": "^\\[Conflict\\].*", 
     "statusCode": "409" 
    }, 
    "500": { 
     "selectionPattern": "^\\[Process exited|ServerError\\].*", 
     "statusCode": "500" 
    }, 
    "504": { 
     "selectionPattern": "^\\[Task timed out\\].*", 
     "statusCode": "504" 
    }, 
    "default": { 
     "statusCode": "200", 
     "responseParameters": {}, 
     "responseModels": {}, 
     "responseTemplates": { 
      "application/json": "" 
     } 
    } 
}