2017-03-16 3 views
0

Ich arbeite an einer REST-API-Node/Express-App. Für meine 'Anmeldungsroute', bei der ein Benutzer die API verwendet, um sich für den Dienst anzumelden, wird ein POST-JSON-Objekt benötigt. Innerhalb dieser Funktion möchte ich gegen die Mongo-Datenbank überprüfen, um sicherzustellen, dass dieser Benutzer nicht bereits existiert.Zugriff auf req.body-Werte in Express

Das Problem ist, dass ich den Benutzernamen von den geposteten Json Informationen erhalten muss, aber jeder Versuch, den ich gemacht habe, ist gescheitert. Die Zeilen, die versuchen, req.body.username und req.body.password zu protokollieren, geben immer 'undefined' zurück. Was mache ich falsch?

Hier ist der Code, den ich bisher habe unten ist:

exports.signup = function(req, res) { 

    // todo: somehow verify that username, password, email and phone number are all provided. 
    // do not write into the collection unless we know all the information has been provided. 
    // maybe access the JSON elements to make sure they are not null 
    // todo: also make sure a record doesn't already exist for this uer 

    var user = req.body; 

    // need to get the username here somehow 
    var JSONuser = JSON.stringify(user); 
// console.log('user: ' + user); 
    console.log('userJSON: ' + JSON.stringify(user)); 
    console.log('username: ' + req.body.username); 
    console.log('password: ' + req.body.password); 

    db.collection('users', function(err, collection){ 
    //if (collection.findOne({})) { // make sure the user doesn't already exist here 
     collection.insert(user, {safe:true}, function(err, result){ 
      if(err){ 
      res.send({'error':'An error has occured'}); 
      } else { 
      console.log('Success: ' + JSON.stringify(result[0])); 
      res.send(result[0]); 
      } 
     }) 
    //} 
    }); 
} 

Antwort

0

standardmäßig in einem ausdrücklichen, Sie haben keinen Zugriff auf diese Variablen durch Punktsyntax. Sie müssten die Antwort analysieren. Zum Glück haben wir ein Paket dafür.

Verwenden Sie body-parser Middleware für den einfachen Zugriff auf Post-Variablen.

// install it 
bash$: npm install body-parser  

// require it in your project 
bodyParser = require('body-parser'); 

// `use` it in your express app 
app.use(bodyParser.urlencoded({ extended: true})); 

// now you your post values are available on the req.body.postVariableName 

Ich benutze dies in fast allen meinen Projekten, es macht es einfach.

* EDIT *

ich an Ihrem Repo sah und alles sieht eigentlich in Ordnung, wie es das Lesen der analysierten Werte bezieht; aber sie sind console logging sie können sein, wo Sie verwirrt werden. Ich habe deine Route neu geschrieben, damit ich es besser erklären kann.

exports.signin = function(req, res) { 

    var user = req.body; 
    console.log('req.body: ' + JSON.stringify(user)); 
    console.log('Signing In As User: ' + user.username); 
    console.log('Password: ' + user.password); 
    res.send('You just signed in!'); 

} 

Ich testete dies mein Öffnen eines anderen Terminals und Curling eines JSON Post.

curl -H "Content-Type: application/json" -X POST -d '{"username":"testuser","password":"testpassword"}' http://localhost:3000/signin 

Wie Sie sehen können, sollte es funktionieren.

Einige Dinge, die Erwähnung verdienen. Wenn Sie console.log('req.body: ' + req.body); geschrieben haben. Sie werden nicht die gewünschten Daten sehen. Sie werden req.body: [object] in der Ausgabe sehen, weil Javascript dies als req.body.toString() darstellt, was nur der Bezeichner ist. Wenn Sie den Code posten möchten, verwenden Sie JSON.stringify(req.body) oder verwenden Sie console.dir(req.body).

Zweitens, req.body wird nur geben Sie Zugriff auf das Körperobjekt.

Wenn Sie immer noch Probleme sehen, ist es wegen der Art, wie Sie Posts localhost machen, nicht wegen Ihres Codes.

+0

Also habe ich das online gelesen, und meine app.js-Datei dafür eingerichtet, aber es wird immer noch als 'undefined' in der Konsolenausgabe angezeigt. Hier ist der Pastebin meiner Hauptdatei app.js: http://pastebin.com/raw/5kSn8eLE Jeder Einblick in, warum ich noch in ein Problem laufe? – user1250991

+0

Haben Sie Ihr Repo auf GitHub, ich sehe kein Problem mit dem Code, den Sie haben, müsste ich mehr sehen. – magreenberg

+0

Sicher, danke für das Betrachten, das GitHub ist verfügbar unter: https://github.com/aaronhesse/restapitest – user1250991

Verwandte Themen