我在哪里定义猫鼬模式的功能

时间:2018-11-13 11:20:06

标签: mongoose mongoose-schema

我只是问自己一个问题,为猫鼬模式定义函数的正确方法是什么。

以我的UserSchema为例。在我的许多路线中,我都希望获取用户的信息,以便进行包含getUserByUsername的查询findOne(username: username)

正如我所写,我正在许多途径中做到这一点。因此,为了缩短我的代码,我想只使用一次此功能,而不要一次又一次地在每个路由中使用此功能。我想要一个中央位置,我可以随时从该位置调用此函数。

因此,我开始搜索并发现,直接在我的UserSchema定义user.js内添加函数是有效的。

整个文件如下:

user.js

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const config = require('../config/database');

const Partner = require('./partner');
const UserRights = require('./userRights');

//User Schema - Datenbankaufbau
const UserSchema = mongoose.Schema({
    name: {
        type: String
    },
    email: {
        type: String,
        required: true
    },
    username: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    partnerId: {
        type: mongoose.Schema.Types.ObjectId, 
        ref: 'Partner' 
    },
    userRights: {
        type: mongoose.Schema.Types.ObjectId, 
        ref: 'UserRights' 
    },
    isLoggedIn: {
        type: Boolean,
        default: false
    },
    hasToRelog: {
        type: Boolean,
        default: false
    }
});



const User = module.exports = mongoose.model('User', UserSchema);


// Find User by ID
module.exports.getUserById = function(id, callback) {
    User.findById(id, callback);
}

// Find User by Username
module.exports.getUserByUsername = function(username, callback) {
    const query = {username: username};
    User.findOne(query, callback);
}

但是我现在想知道,这是存储函数的正确方法还是有更好的/其他方法?

1 个答案:

答案 0 :(得分:0)

您应该创建一个控制器文件夹,在其中定义函数,并且在发出任何请求时将在route类中调用这些函数。您可以在下面的文章中有详细的想法。

https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/routes