我正在研究一个带有Node,Mongo和amp;的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”方法不返回任何内容,“user”对象最终为空。
答案 0 :(得分: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 });
});
如果您想要更新,那么您可以使用 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
});
答案 1 :(得分:0)
好的,我发现了问题。
Chridam的代码是正确的,但我还需要将我的表单从GET更改为POST。一旦我这样做,表单POSTed和mongo可以看到request.body.username
(之前它是null)并使用Chridam的代码查找我的用户。
在阅读了Chridam的修改后的答案后,也能够与GET合作。
现在正在处理更新代码..