Mongoose findOne适用于" _id"用"用户名"失败

时间:2016-07-16 22:11:41

标签: mongoose

用户模型:

var User = new Schema({
    username: String,
    password: String
})

有一个用户名为:"六"

在mongo shell中,这有效:

db.users.findOne({username:'six'})

用mongoose工作:

User.findOne({_id: req.params.id}, function(err, user) {
    res.json(user);
});

但这并不是:

User.findOne({username:'six'}, function(err, user) {
   if(err) console.log(err);
   res.json(user);

});

没有返回错误但也没有用户。 我错过了什么,我看不出来。 感谢。

2 个答案:

答案 0 :(得分:0)

尝试将username放在单引号中,如下所示:

User.findOne({'username':'six'}, function(err, user) {
   if(err) console.log(err);
   res.json(user);
});

答案 1 :(得分:0)

我删除了User.findOne({_id: req.params.id}中的router.get('/:id',)工作User.findOne({'username':'six'},该router.get('/:username')位于- /:id之前的非工作/:username之前,它开始有效。

所以我没有2 router.get('/:XXX') - 即使它们是不同的路径if (req.params.id == 0) next('route'); [ConfigurationProperty("contacts")] [TypeConverter(typeof(StringSplitConverter))] public IEnumerable<string> Contacts { get { return (IEnumerable<string>)base["contacts"]; } }

我认为快速路由处理程序允许路径有多个路由,并且如果两个路由器都是router.get('/:id)那么可能会出现问题,那么第二个路由器永远不会被调用(发生在我的/:用户名路由)当第一个路由结束请求 - 响应周期。但我错误地认为道路是不同的,不适用。 我向@Lucas Watson道歉,因为我不确定他是否会发现我的错误。

作为替代方案,我可以补充一下:

public class StringSplitConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        return string.Format("{0}", value).Split(',');
    }
}

到/:id路由回调。