Javascript 如何处理查询中的数组值?

Javascript 如何处理查询中的数组值?,javascript,node.js,api,url,Javascript,Node.js,Api,Url,我有一个url,它接受一个topicName查询数组,如下所示 localhost:3000/api/?topicName=mobile topicNameArray = req.query.topicName if(req.query.topicName.constructor !== Array) { topicNameArray = [req.query.topicName]; } localhost:3000/api/?topicName=mobile&topicName=we

我有一个url,它接受一个topicName查询数组,如下所示

localhost:3000/api/?topicName=mobile
topicNameArray = req.query.topicName
if(req.query.topicName.constructor !== Array) {
   topicNameArray = [req.query.topicName];
}
localhost:3000/api/?topicName=mobile&topicName=website

有时topicName只有一个这样的值

localhost:3000/api/?topicName=mobile
topicNameArray = req.query.topicName
if(req.query.topicName.constructor !== Array) {
   topicNameArray = [req.query.topicName];
}
下面是我如何在NodeJS中使用该查询值

let topicNameArray = [];
topicNameArray = req.query.topicName
let value = topicNameArray.map(function(e) {
return new RegExp(e, "i");
})
我面临的问题是,当数组查询只有一个值时,我的应用程序将收到此消息

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

有人能给我一个解决这个问题的办法吗?非常感谢你

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

localhost:3000/api/?topicName=mobile
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];
}
当前,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;

我相信您需要改革您的查询字符串,以减轻您正在经历的错误

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


稍后,您可以检查查询参数是否为数组。您可以使用Array.isArray函数进行此操作。然后您可以在后面的部分执行异常处理。

您可以使用console.logtopicNameArray检查topicNameArray是数组还是字符串。array.isArray就是我需要的。谢谢