Как вообще проверить, не являются ли все параметры запроса (тело, запрос, параметры) неопределенными или нулевыми, используя промежуточное программное обеспечение Express? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь написать RESTful API в NodeJS, используя Express, и хочу проверить, не являются ли все параметры запроса неопределенными или нулевыми.Эта проверка должна выполняться в качестве промежуточного программного обеспечения для каждого входящего запроса.

Описание проблемы

Я знаю, что есть способ получить исходный путь, используя req.route.Мой текущий подход состоит в том, чтобы написать функцию промежуточного программного обеспечения, чтобы получить исходный путь запроса, а затем искать ожидаемые свойства / параметры в IDL, например, Swagger.Проблема в том, что у меня пока нет спецификации Swagger для API, и я не хочу изменять путь и искать файл Swagger для каждого запроса.

Есть ли другой способпроверить уместно, если параметры не определены или нулевые?Я в некотором роде решение, как показано в псевдокоде ниже.

app.use((req, res, next) => {
    // checks for each expected body, query or path param if there is an 
    //     representative in the actual request which is not undefined or null
    if (/* there is such an parameter */) {
        res.sendStatus(400);
        return;
    }
    next();
});

Подход временного решения

На данный момент у меня есть функция, которая получает параметры в качестве аргумента отдыха и проверяет их на наличие неопределенных илиноль.Там у меня есть два разных способа, которые можно увидеть ниже в примере кода, написанного для этого вопроса.

app.post('/students', (req, res, next) => {
    checkProperties2(res, next, req.body.name, req.body.id, req.body.age);
}, (req, res, next) => {

    let name = req.body.name;
    let id = req.body.id;
    let age = req.body.age
    console.log(`Name: ${name}, ID ${id}, age ${age}`);
    res.status(201).end(JSON.stringify({ msg: 'Created!' }));

});

app.post('/teachers', (req, res, next) => {
    let name = req.body.name;
    let id = req.body.id;
    let age = req.body.age
    if (checkProperties(res, name, id, age)) {
        console.log(`Name: ${name}, ID ${id}, age ${age}`);
        res.status(201).end(JSON.stringify({ msg: 'Created!' }));
    }
});

function checkProperties2(res, next, ...properties) {
    for (let i = 0; i < properties.length; ++i) {
        if (properties[i] == undefined || properties[i] == null) {
            res.status(400).end(JSON.stringify({ msg: 'Bad request!' }));
            return;
        }
    }
    next();
}

function checkProperties(res, ...properties) {
    for (let i = 0; i < properties.length; ++i) {
        if (properties[i] == undefined || properties[i] == null) {
            res.status(400).end(JSON.stringify({ msg: 'Bad request!' }));
            return false;
        }
    }
    return true;
}

Этот подход явно работает, но это раздражает, так как я должен явно добавлять его к каждомуконечная точка одним из способов.Это приведет к менее чистому коду и удобству обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...