我有一个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
有人能建议我解决这个问题吗?非常感谢你!
答案 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