我有一些学生模型保存到mongodb实例,我试图通过用户名获取。这是我为学生定义的猫鼬模型:
var studentSchema = mongoose.Schema({
local : {
username : String,
password : String,
}
});
在我的路线文件中,我正在尝试编写router.param
,以便我可以对/ students /<执行CRUD操作用户名>。我的代码如下所示:
router.param('student', function(req, res, next, username) {
var query = Student.findOne({ 'username' : username });
query.exec(function(err, student) {
if (err)
return next(err);
if (!student)
return next(new Error("Can't find student."));
req.student = student;
return next();
});
});
我能够成功查询我的/students
路由以获取数据库中的所有学生文档,但我的router.param
代码似乎不起作用。每当我尝试curl localhost:8000/students/<username>
时,即使学生明显在数据库中并返回“找不到学生”,也找不到学生。错误。我不确定我的router.param
代码有什么问题。
非常感谢任何帮助!
答案 0 :(得分:2)
如果您使用router.param,则每次传递该参数时,您都将执行此操作。我不知道这是不是你想要的,但就我所知,你应该使用类似的东西:
router.get('/students/:username', function(req, res) {
Student.findOne({'username': req.params.username}, function (doc) {
这样,当您将用户名发送到特定路线时,您将找到该用户并显示您需要的所有数据。
如果有帮助,请告诉我。
答案 1 :(得分:2)
路由器参数函数正在尝试查找具有用户名属性的学生,但根据StudentSchema,它没有用户名属性,它实际上嵌套在本地,将您的查询更改为:
Student.findOne({ 'local.username' : username });
答案 2 :(得分:0)
执行任何操作时,参数名称应相同!
router.param('student', function(req, res, next, student) { <--- Should be student
var query = Student.findOne({ 'username' : student });<--- Should be student
query.exec(function(err, student) {
if (err)
return next(err);
if (!student)
return next(new Error("Can't find student."));
req.student = student;
return next();
});
});