mongoose模型扩展扩展

    所以我们在dao层需要很多单一模型的数据库操作方法的封装,如果业务非常复杂,比如一个超级查询方法,然后又有各种具体业务定义方法,难道我们一个一个的都写在dao层么?

    事实上dao只做暴露给service的方法,而具有一定业务约定的方法是可以放到model层上做的,如果我们dao层的很多底层方法可以下沉到model,这样就可以让它们的职责更加清晰。所以,我们里有mongoose的模型扩展来重新定义一下分层

    • statics:类上扩展

    根据业务需求来确定,是通过类方法调用,还是通过实体对象上的方法来调用,然后我们根据对应业务,写mongoose相应的扩展即可。下面会分别讲解这2种扩展的差别:

    比如我们有这样一个需求,根据用户名查找用户,调用的时候是放到类上好,还是放在实例上好呢?

    1. User.find_by_username(openid, cb)

    调用

    1. var user = new User({});
    2. user.is_exist(cb)

    具体测试代码见db/extend/test.js

    1. $ npm run extend
    2. > ava -v extend/test.js
    3. 数据库连接成功
    4. #find_by_username()