【发布时间】:2012-03-16 17:41:04
【问题描述】:
我正在尝试为用户创建一条路径,以便能够检查其他用户的个人资料。但是,我希望通过 2 个不同的 URL /profile/nickname 和 /profile/id 访问这些配置文件,以便可以使用用户的昵称或用户 ID 访问配置文件。我尝试了以下代码:
app.get("/profile/:id", function(req, res) {
User.findOne( { $or : [{ "nickname": req.params.id },{ "_id": req.params.id }] }, function(err, user) {
if(user)
{
res.render('users/profile.jade', {
locals: {
currentUser: user,
title: user.nickname +"'s Profile",
jsf:[],
}
});
}
else
{
res.render('404.jade', {
status: 404,
title: 'Page Not Found',
jsf: []
});
}
});
});
问题是,它似乎只使用 id 而不是昵称,这意味着如果我访问 /profile/4f4ae474546708b219000005 一切正常,但如果我访问 /profile/mmellad 这是该用户的给定昵称,我得到了 404 页面。
我还发现另外一件事对昵称很有效,那就是从
更改查询User.findOne( { $or : [{ "nickname": req.params.id },{ "_id": req.params.id }] }
到
User.findOne( { "nickname": req.params.id } }
在这种情况下,/profile/mmellado 工作正常,但使用用户 ID 显然不行。
这样做的正确方法是什么?我想我可能使用了错误的方法。
另外要提的是,如果我在 mongo 控制台中尝试以下代码,它也可以正常工作:
x = db.users.findOne({ $or: [ {nickname:"mmellado"}, {_id:ObjectId("4f4ae474546708b219000005")} ]})
我通过插入正确的昵称和错误的 _id 来测试该代码,然后使用错误的昵称和正确的 _id 进行测试。在这两种情况下,x 最终都包含了我需要的记录的对象。
我想我可能可以通过额外的路线来修复它,但我是 Node.js 和 Express 的新手,所以我不确定正确的方法是什么。
谢谢!
【问题讨论】:
-
你用的是什么版本的mongo?
-
Mongo 版本如下:Marcos-Mellados-iMac-2:~ marcos$ mongod --version db version v2.0.2, pdfile version 4.5 Mon Feb 27 02:48:11 git version: 514b122d308928517f5841888ceaa4246a7f18e3
标签: node.js mongodb routes express