2015-06-15 6 views
5

Wie in dem Titel angegeben, gibt meine App-GET-Anfrage an eine bestimmte Route/Controller-Funktion badRequest mit JSON in einer Entwicklungsumgebung, aber nicht in einem Prod zurück Umgebung. Warum ist das? HierSails.js Production Environment gibt keine JSON-Antwort auf badRequest zurück aber dev-Umgebung funktioniert

ist die Controller-Funktion:

index: function(req, res) { 

    async.auto({ 

     companies: function(cb) { 

      User.findOneById(req.session.user.id) 
       .populate('companies') 
       .exec(function(err, user) 
      { 

       if(err) { 
        var badRequestData = { error: err }; 
        return cb(badRequestData, null); 
       } else if(user.companies.length == 0) { 
        var badRequestData = { error: "This user has no associated companies." }; 
        return cb(badRequestData, null); 
       } 

       cb(null, user.companies) 

      }); 

     }, 

     validateForNullCompanies: ['companies', function(cb, results) { 

      var nullCompanies = _.where(results.companies, { stripeAccountId: null }); 

      if(nullCompanies.length > 0) { 
       var badRequestData = { error: "This user needs to authenticate stripe with their company." }; 
       return cb(badRequestData, null); 
      } else { 
       return cb(); 
      } 

     }] 

    }, function(err, results) { 

     if (err) { 
      return res.badRequest(err); 
     } 

     return res.ok(); 

    }); 

}, 

Antwort

6

einfach in das zu gestoßen,

Wenn Sie auf die Noten schauen in http://sailsjs.org/documentation/reference/response-res/res-bad-request es sagt

standardmäßig die angegebene Fehler (err) wird ausgeschlossen, wenn die App in der "production" -Umgebung läuft (zB process.env.NODE_ENV === 'production').

Und einen Blick auf api/responses/badRequest.js nehmen wir den folgenden Code sehen:

// Only include errors in response if application environment 
// is not set to 'production'. In production, we shouldn't 
// send back any identifying information about errors. 
if (sails.config.environment === 'production') { 
    data = undefined; 
} 

Also, wenn Sie diesen Kommentar aus, ich bin sicher, Sie werden in der Produktion das gewünschte Ergebnis erhalten. Zur gleichen Zeit scheint es aus einem bestimmten Grund hier zu sein, also senden Sie vielleicht benutzerdefinierte Fehlercodes mit res.send([statusCode], body) zurück, wo body Ihr JSON ist, oder erstellen Sie alternativ eine clientseitige Behandlung mit einer weniger anschaulichen Erklärung der schlechten Anfrage.

// Only include errors in response if application environment 
    // is not set to 'production'. In production, we shouldn't 
    // send back any identifying information about errors. 
    if (sails.config.environment === 'production' && sails.config.keepResponseErrors !== true) { 
    data = undefined; 
    } 

Der Grund bereits in den Kommentaren angegeben:

+0

Gibt es einen Grund, warum schlechte Anforderungsnachrichten nicht angezeigt werden sollten? Was ist die beste Methode, Fehler zu offenbaren, ohne diese zu umgehen? –

+0

Das ist alt, aber eine gültige Antwort, also werde ich akzeptieren. – morcutt

2

ähnlich wie die Antwort von finnergizer zur Verfügung gestellt, wenn Sie die api/Antworten/badRequest.js überprüfen, der eigentliche Code so sein sollte. Wenn Sie immer noch glauben, dass Sie die Fehlermeldung in der Produktionsumgebung anzeigen möchten, können Sie den Eintrag "keepResponseErrors" hinzufügen und in config/env/production.js auf true setzen, anstatt diese Zeile auszukommentieren. Wie folgt:

module.exports = { 
    keepResponseErrors: true 
}; 

Auf diese Weise müssen nicht alle API/Antwort-JS-Dateien geändert werden.

Verwandte Themen