如何在查询中处理数组值?

时间:2018-06-15 23:39:05

标签: javascript node.js api url

我有一个url,它接受一个像这个

的topicName查询数组

本地主机:3000 / API / topicName =移动&安培; topicName =网站

有时topicName只有一个这样的值

localhost:3000/api/?topicName=mobile

以下是我在节点JS中使用该查询值的方法

let topicNameArray = [];
topicNameArray = req.query.topicName
let value = topicNameArray.map(function(e) {
return new RegExp(e, "i");
})

我面临的问题是,当数组查询只有一个值时,我的应用程序将收到此消息

"message": "topicNameArray.map is not a function

有人能建议我解决这个问题吗?非常感谢你!

3 个答案:

答案 0 :(得分:1)

我相信您需要改进查询字符串以减轻您遇到的错误。

目前我认为您有一个类似的查询字符串:localhost:3000/api/?topicName=mobile&topicName=website这里有一个查询参数topicName,这本质上是一个字符串。因此,当您的查询字符串中有多个topicName键实例时,您应该将该键的值替换为查询字符串中的最后一个实例。因此,要发送一个值数组,请使用查询字符串结构,如下所示:localhost:3000/api/?topicName[]=mobile&topicName[]=website (注意方括号。)

稍后您可以检查查询参数是否是数组。您可以使用Array.isArray功能。然后,您可以在以后的部分上执行异常处理。

答案 1 :(得分:0)

您可以使用以下方法之一检查topicName是否为数组,并将其转换为此类数组

topicNameArray = req.query.topicName
if(req.query.topicName.constructor !== Array) {
   topicNameArray = [req.query.topicName];
}

或者像这样,

topicNameArray = req.query.topicName
if(!topicNameArray.length) { // only arrays have length property
   topicNameArray = [req.query.topicName];
}

答案 2 :(得分:0)

目前,topicNameArray正被重新分配给req.query.topicName,当只有一个topicName时,req.query.topicName实际上是一个字符串。您可以检查let topicNameArray = req.query.topicName; // assume its an array if (typeof topicNameArray === "string") { // check if it's a string topicNameArray = [req.query.topicName]; // convert to array } 的类型,如果它的字符串将其转换为如下数组:

let topicName = req.query.topicName;
let topicNameArray = (typeof topicName === "string") ? [topicName] : topicName;

或者如果您更喜欢三元运算符的外观:

SUBSTR