MEAN Stack: очень специфические веб-запросы к общим методам моделей или универсальные веб-запросы с очень специфическими методами моделей? - PullRequest
0 голосов
/ 28 августа 2018

Я унаследовал кодовую базу с несколькими явными методами для каждой модели, и я начал замечать, что большинство, если не все эти методы, могут быть сокращены до четырех универсальных Create, Read, Update и Delete (CRUD) методы, просто передавая в них соответствующий JSON из маршрутов или веб-запросов, вместо того, чтобы явно определять такие вещи, как запросы монго внутри модели.

У меня вопрос: я наткнулся на лучшие практики или это упрощение приводит к некоторой дыре в безопасности или проблемам с аутентификацией, которых я просто пока не вижу?

Например, все эти методы существуют в 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'"})?

Я надеюсь свести каждую модель / *. Js к схеме и четырем методам, оставляя либо маршруты, либо веб-запросы для предоставления всего JSON, необходимого, например, для обновления записи. Я просто не уверен, какой из трех вариантов (несколько методов модели (текущая реализация), несколько маршрутов или несколько веб-запросов) является наилучшей практикой.

О каких возможных будущих проблемах я не думаю? Упрощение методов модели на самом деле так, как это должно было быть написано с самого начала?

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете использовать объект req.query для общих запросов. Например, запрос GET по маршруту /users/getUser?_id=<some_user_id> или /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);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...