Я пытаюсь написать 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;
}
Этот подход явно работает, но это раздражает, так как я должен явно добавлять его к каждомуконечная точка одним из способов.Это приведет к менее чистому коду и удобству обслуживания.