MEAN Stack:针对通用模型方法的非常特定的Web请求,还是具有特定模型方法的常规Web请求?

时间:2018-08-28 15:42:26

标签: node.js mongodb express curl

我已经在每个模型上继承了带有几个显式方法的代码库,并且我开始注意到,大多数(如果不是全部)这些方法可以简化为四个通用的创建,读取,更新和删除(CRUD)方法,只需通过路由或Web请求向其中传递适当的JSON,而不是在模型中明确定义诸如mongo查询之类的东西。

我的问题是:我是否偶然发现了最佳实践,还是这种简化带来了一些我还没有看到的安全漏洞或身份验证问题?

例如,所有这些方法都存在于models / user.js中:

module.exports.getUserByID = function (id, callback) {
    const query = {'_id': id };
    User.findOne(query, callback);
};

module.exports.getUserByUsername = function (username, callback) {
    const query = {'username': username};
    User.findOne(query, callback);
};

module.exports.getUserByFullname = function (fullname, callback) {
        const query = {'name.fullname': fullname};
        User.findOne(query, callback);
    };

...我想将它们合并为一个方法...

models/user.js:
    module.exports.getUser = function (query, callback) {
        User.findOne(query, callback);
    };

然后我是否需要三个不同的POST路由(/users/byId, /users/byName, and users/byFullName),或者可能需要一个POST路由users/getUser,可以通过cURL({'_id':"'$userID'"}, {'username':"'$userName'"},{'name.fullname':"'$userFullName'"})传递特定的查询?

我希望将每个models / *。js简化为一个架构和四个方法,将其留给路由或Web请求,以提供所有JSON,例如更新记录。我只是不确定这三个选项(几种模型方法(当前实现),几种路由或几种Web请求)中的哪一种是最佳实践。

我没有想到什么可能的未来问题?简化模型方法实际上是从一开始就应该编写的方式吗?

1 个答案:

答案 0 :(得分:1)

您可以将 req.query 对象用于一般查询。 例如,对路由/users/getUser?_id=<some_user_id>/users/getUser?username=<some_user_name>/users/getUser?fullname=<some_full_name>的GET请求可以实现如下:

var getUser = require('models/user');
app.get('/users/getUser', (req, res, next) => {
    let query = req.query;
    if (req.query.fullname) {
        query['name.fullname'] = req.query.fullname;
        delete query.fullname;
    }

    getUser(query, (err, user) => {
        if (err) handleError(err);
        console.log(user);
    });
});