Как применять типы данных в параметрах запроса, передаваемых через URL?Есть ли способ сделать некоторые параметры обязательными? - PullRequest
1 голос
/ 13 мая 2019

Я пытаюсь реализовать маршрут "/ 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

Это не должно рассматриваться как идеальный вывод, так как типы данных поменялись местами.

Пожалуйста, дайте мне знать, если есть способ реализовать вышеизложенное?

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