gpt4 book ai didi

node.js - Nodejs 中查询字符串的多种类型

转载 作者:太空宇宙 更新时间:2023-11-03 22:21:41 25 4
gpt4 key购买 nike

我正在nodejs中创建一个get api。我请求以下网址

http://localhost:8080/api?id=20&condition1=true&arr=[{prop1:1}]&obj={a:1,b:2} And I am getting the request query object as follows-

req.query = {
arr:"[{prop1:1}]",
condition1:"true",
id:"20",
obj:"{a:1,b:2}"
}

我想将查询对象键转换为适当的类型。我的查询对象应转换为

req.query = {
arr:[{prop1:1}], // Array
condition1:true, // Boolean
id:20, // Number
obj: {a:1,b:2} //Object
}

req.query 对象是动态的,它可以包含任意数量的对象、数组、 bool 值、数字或字符串。有什么办法可以做到吗?

最佳答案

此功能无法通过 express 和查询参数直接使用。

问题在于,为了让查询字符串解析器知道 "true" 是实际的 bool 值 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
}

关于node.js - Nodejs 中查询字符串的多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53718595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com