Эта функциональность не поставляется из коробки с express
и параметрами запроса.
Проблема в том, что для того, чтобы синтаксический анализатор строки запроса знал, является ли "true"
действительным логическим значением true
или строка "true"
, для объекта запроса требуется какой-то Schema
, чтобы помочь синтаксическому анализу строки.
Опция A
Я могу порекомендовать использовать Joi .
В вашем случае это будет выглядеть так:
const Joi = require( "joi" );
const querySchema = {
arr: Joi.array(),
condition1: Joi.boolean(),
id: Joi.number(),
obj: {
a: Joi.number(),
b: Joi.number()
}
}
Имея эту схему, вы можете присоединить ее к вашему экспресс-методу и использовать Joi.validate
Чтобы проверить это.
function getFoo( req, res, next ) {
const query = req.query; // query is { condition1: "true" // string, ... }
Joi.validate( query, querySchema, ( err, values ) => {
values.condition1 === true // converted to boolean
} );
}
Опция B
Другой способ правильно набрать GET-запросы - обмануть параметры запроса и просто предоставить строкуJSON.
GET localhost/foo?data='{"foo":true,"bar":1}'
Это даст вам возможность просто проанализировать запрос
function getFoo( req, res, next ) {
const data = JSON.parse( req.query.data )
data.foo // boolean
data.bar // number
}