2016-05-18 6 views
1

Ich arbeite an einer CRUD-Anwendung mit Knoten, Mongo & Mönch. Ich möchte einen Datensatz nach Benutzername suchen und dann aktualisieren. Aber ich bin nicht in der Lage, einen Datensatz zu finden, dieser Code funktioniert nicht:Benutzer mit Namen nicht gefunden mit Monk/Mongo

// GET User Profile 
router.get('/userprofile', function(request,response){ 
    var db = request.db; 
    var userName = request.body.username; 
    var collection = db.get('usercollection'); 
    collection.findOne({ 
    "username": userName 
    },{},function(e,user){ 
    response.render('userprofile', { 
    "user": user 
    }); 
    }); 
    }); 

Die „FindOne“ Methode nichts zurückliefert, und das „user“ Objekt endet leer.

Antwort

1

Entfernen Sie die Mitte leer Objekt aus der Signatur für die findOne() Methodensignatur für die Abfrage zu arbeiten:

Hinweis: Die Art und Weise Sie die userName bekommen für ist, wenn die Anforderung Methode ist ein POST, Hier machst du ein GET, also musst du die Eigenschaft request.query verwenden. Weitere Details here

var userName = request.query.username; 
collection.findOne({"username": userName}, function(e,user){ 
    response.render('userprofile', { "user": user }); 
}); 

Wenn Sie aktualisieren möchten, dann können Sie die update() Methode verwenden: Angenommen, Sie das username Feld aktualisieren möchte es 'foo' zu ändern, zeigt der folgende Stub, wie Sie tun können das update:

var u = collection.update({ "username": userName }, { "$set": { username: 'foo' } }); 
u.complete(function (err, result) { 
    console.log(err); // should be null 
    console.log(result); // logs the write result 
}); 
+0

Ich habe es versucht und es hat nicht funktioniert. Ich ging zurück und verwendete eine Antwort (send) und es stellt sich heraus, dass mein Benutzername leer ist: 'response.send (request.body.username +" ist der Suchschlüssel ");' gibt eine undefinierte Antwort zurück, obwohl die URL so aussieht eine richtige Abfrage: "http: // localhost: 3000/userprofile? username = fred". Die ursprüngliche Form, die ich verwendet habe, um die Route zu bekommen, ist dies: "form # formEditUser (name =" edituser ", method =" get ", action ="/userprofile ") Eingabe # inputUserName (type =" hidden ", value = user.username, name = "username") button # btnSubmit (type = "submit") Edit' –

+0

Die Art, wie Sie den 'userName' bekommen, ist, wenn die Anfrage Methode ein POST ist, hier machen Sie ein GET so Sie müssen die Eigenschaft 'request.query' verwenden. Mehr Details [hier] (http://expressjs.com/en/api.html#req.query) – chridam

0

Ok, ich habe das Problem herausgefunden. Der Code von Chridam war korrekt, aber ich musste auch mein Formular von einem GET zu einem POST ändern. Sobald ich das getan hatte, konnte das Formular POSTed und Mongo request.body.username sehen (es war zuvor null) und meinen Benutzer mit Chridams Code nachschlagen.

Nach dem Lesen von Chridams überarbeiteter Antwort war es auch möglich, es mit GET zu arbeiten.

Jetzt arbeitet an dem Update-Code ..

Verwandte Themen