无法使用 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 一起工作。
正在处理更新代码..
我正在使用 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 一起工作。
正在处理更新代码..