Я пытаюсь реализовать маршрут "/ userdata" такой, что:
Идеальные ответы от API должны быть такими:
При ошибке отображается следующий ответ -
{error: true, status: 403, userMessage: 'some query parameter missing',
data: <Name of the parameter that is missing>}.
Обязательными параметрами запроса являются - name: String, age: Number
В случае успеха, отображается следующий ответ -
{error: false, status: 200, userMessage: 'all query parameters entered',
data: {name: <Name passed in query params>, age: <age passed in query params>}}.
Я почти закончил свою реализацию, однако я хотел бы применить
проверка типа данных в передаваемых параметрах. Подскажите, пожалуйста, есть ли способ добиться того же?
Я также пытался использовать req.params вместо req.query. Однако это не дает мне желаемого результата.
// All code files
<app.js code>
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const response = require('./user-middleware');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// Creating a route named query
app.get('/userdata',(req,res) => {
var name = req.query.name;
var age = req.query.age;
if(name === null || name === undefined || name.length === 0)
{
let apiResponse = response.generate(true, 403, 'some query parameter missing', {name:"name",age:`${age}`});
res.send(apiResponse);
}
else if(age === null || age === undefined || age.length===0)
{
let apiResponse = response.generate(true, 403, 'some query parameter missing', {name:`${name}`,age:"age"});
res.send(apiResponse);
}
else
{
let apiResponse = response.generate(false, 200, 'all query parameters entered', req.query);
res.send(apiResponse);
}
});
app.listen(3000);
module.exports = app;
<user-middleware.js code>
let generate = (error, status, userstatus, data) => {
let response = {
error: error,
status: status,
userstatus: userstatus,
data: data
};
return response;
};
module.exports = {
generate: generate
};
В настоящее время ответы следующие:
Если передано только имя:
http://localhost:3000/userdata?name=ace
Выход:
{"error":true,"status":403,"userstatus":"some query parameter missing","data":{"name":"ace","age":"age"}}
Если указан только возраст:
http://localhost:3000/userdata?age=21
Выход:
{"error":true,"status":403,"userstatus":"some query parameter missing","data":{"name":"name","age":"21"}}
Если оба пройдены:
Выход:
http://localhost:3000/userdata?name=ace&age=21
{"error":false,"status":200,"userstatus":"all query parameters entered","data":{"name":"ace","age":"21"}}
Я бы хотел избежать следующего вывода:
{"error":false,"status":200,"userstatus":"all query parameters entered","data":{"name":"21","age":"ace"}}
при доступе к следующему URL:
http://localhost:3000/userdata?name=21&age=ace
Это не должно рассматриваться как идеальный вывод, так как типы данных поменялись местами.
Пожалуйста, дайте мне знать, если есть способ реализовать вышеизложенное?