【问题标题】:MEAN Stack: Very specific web requests to generic model methods, or generic web requests with very specific model methods?MEAN Stack:对通用模型方法的非常具体的 Web 请求,还是具有非常具体的模型方法的通用 Web 请求?
【发布时间】:2019-02-03 07:34:47
【问题描述】:

我在每个模型上都继承了一个包含多个显式方法的代码库,并且我开始注意到大多数(如果不是全部)这些方法可以简化为四个通用的创建、读取、更新和删除 (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 请求)中的哪一个是最佳实践。

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

【问题讨论】:

    标签: node.js mongodb express curl


    【解决方案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);
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多