2016-05-18 15 views
1

私はNode、MongoでCRUDアプリケーションを作成しています& Monk。 私はユーザー名でレコードを見つけて、それを更新したいと思います。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 
    }); 
    }); 
    }); 

「findOne」メソッドは何も返さない、と「利用者」オブジェクトは空終わる: は、しかし、私は、このコードは動作していない、レコードを見つけることができませんよ。クエリが動作するために

答えて

1

findOne()メソッドシグネチャのための署名から中央の空のオブジェクトを削除します。

:あなたはuserNameを得ている方法は、リクエストメソッドがPOSTであるときのためにあります、ここではGETを実行しているので、request.queryプロパティを使用する必要があります。詳細here

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

あなたは、あなたがあなたが'foo'に変更するusernameフィールドを更新する必要があるとし、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

私はそれを試しても機能しませんでした。私は戻って、応答(送信)を使用し、私のユーザー名は空白です: 'response.send(request.body.username +"は検索キーです); 'は、URLが似ていても未定義の応答を返します適切なクエリ: 'http:// localhost:3000/userprofile?username = fred'。私がルートを取得するために使用した元のフォームは次のようになります: '#formUpName(type =" hidden "、value = ボタン#btnSubmit(type = "submit")Edit' –

+0

リクエストメソッドがPOSTの場合の 'userName'の取得方法は、ここでGETしています。 'request.query'プロパティを使う必要があります。詳細はこちら[こちら](http://expressjs.com/en/api.html#req.query) – chridam

0

[OK]をクリックします。 Chridamのコードは正しいですが、GETからPOSTにフォームを変更する必要もありました。私がそれをしたら、POSTedとmongoのフォームはrequest.body.username(これは以前はnullでした)を見て、Chridamのコードを使って自分のユーザを調べました。

Chridamの改訂版の解答を読んだあと、GETを利用することもできました。

更新コードで作業しています。

関連する問題