node.js - MEAN Stack : Very specific web requests to generic model methods, 或具有非常具体模型方法的通用 Web 请求?

标签 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 和 users/byFullName),或者可能需要一个 POST 路由 users/getUser,该路由可以从 cURL 传递特定查询 ({'_id':"'$userID'"}, {'username':"'$userName'"},{'name.fullname':"'$userFullName'"} )?

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

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

最佳答案

您可以使用 req.query 对象用于您的通用查询。 例如,路由 /users/getUser?_id=<some_user_id> 上的 GET 请求或/users/getUser?username=<some_user_name>/users/getUser?fullname=<some_full_name>可以按如下方式实现:

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);
    });
});

关于node.js - MEAN Stack : Very specific web requests to generic model methods, 或具有非常具体模型方法的通用 Web 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52061741/

相关文章:

mongodb - 使用 backbone.js 在模型中保存嵌套集合

node.js - 我可以为 REST api 中的不同方法编写相同的路径名吗?

node.js - 返回的对象未定义,使用 dynamicHelpers

mongodb - MongoDB 的 GeoNear 的替代品

mongodb - Mongo shell 立即关闭

node.js - 更新包含多个字段的文档

Node.js:如何将 readStream 作为函数参数传递并在回调中使用?

node.js - 按子文档拆分文档

javascript - 参数 "options"不是 Firestore 上的有效 SetOptions 错误

javascript - Electron 在树莓派上不起作用