无法使用 Monk 按名称找到用户/Mongo

Can't find user by name with Monk / Mongo

我正在使用 Node、Mongo 和 Monk 开发一个 CRUD 应用程序。 我想通过用户名找到一条记录,然后更新它。 但我找不到记录,此代码无效:

// 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" 方法没有 return 任何东西,"user" 对象最终为空。

findOne() 方法签名的签名中删除中间的空对象以使查询生效:

注意:你获得userName的方式是当请求方法是POST时,这里你正在做一个GET所以你需要使用request.query属性。更多详情 here

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

如果要更新那么可以使用update()的方法,假设要更新username字段将其改为'foo',以下存根显示了如何进行更新:

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
});

好的,我发现问题了。 Chridam 的代码是正确的,但我还需要将我的表单从 GET 更改为 POST。一旦我这样做了,表单 POSTed 和 mongo 就可以看到 request.body.username(之前它是空的)并使用 Chridam 的代码查找我的用户。

阅读 Chridam 的修改后的答案后,也能够使其与 GET 一起工作。

正在处理更新代码..