我有一组机器人名称。当用户或机器人访问我的网站时,我得到 user-agent
并想测试它是否存在数组中的值之一。
var bots = [
"twitterbot",
"linkedinbot",
"facebookexternalhit",
"pinterest",
"dotbot",
"rogerbot",
"googlebot",
"baiduspider",
"yahoo! slurp",
"bot",
"spider",
"simplepie",
"yahooseeker",
"embedly",
"quora link preview",
"outbrain",
"vkshare",
"monit",
"pingability",
"monitoring",
"winhttprequest",
"apache-httpclient",
"getprismatic.com",
"python-requests",
"twurly",
"yandex",
"browserproxy",
"webmeup-crawler",
"qwantify"
];
var isBot = function(agent){
return bots.some(function(bot){
return bot.test(agent);
});
}
app.use(function(req, res, next){
var test = isBot(req.get("user-agent").toLowerCase());
console.log(test);
});
这给了我错误:TypeError: undefined is not a function
这里出了什么问题? 如果您可以通过指向有用的外部链接或自己提出一些建议来帮助我扩展此机器人列表,则可加分!
最佳答案
test
函数不适用于字符串,但适用于 RegExp 对象。因此,您需要将列入黑名单的项目定义为 RegExp,而不是字符串:
var bots = [
/twitterbot/,
/linkedinbot/,
/facebookexternalhit/,
/pinterest/,
/dotbot/,
/rogerbot/,
/googlebot/,
/baiduspider/,
/yahoo! slurp/,
/bot/,
/spider/,
/simplepie/,
/yahooseeker/,
/embedly/,
/quora link preview/,
/outbrain/,
/vkshare/,
/monit/,
/pingability/,
/monitoring/,
/winhttprequest/,
/apache-httpclient/,
/getprismatic.com/,
/python-requests/,
/twurly/,
/yandex/,
/browserproxy/,
/webmeup-crawler/,
/qwantify/
];
var isBot = function(agent){
return bots.some(function(bot){
return bot.test(agent);
});
};
alert('"clean-user-agent" is bot? ' + isBot('clean-user-agent'));
alert('"the ***twitterbot***" is bot? ' + isBot('the ***twitterbot***'));
关于javascript - 针对字符串测试子字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32455578/