我正在构建一个节点应用程序,该应用程序的一个模块会检查给定域名的名称服务器是否指向AWS。
使用dns
模块,我有以下代码:
dns.resolveNs(domain, function (err, hostnames) {
console.log(hostnames);
console.log(hostnames.indexOf('awsdns') > -1);
});
hostnames
输出一个主机名数组,我使用的特定域具有以下主机名结构(x4):
ns-xx.awsdns-xx.xxx
但console.log(hostnames.indexOf('awsdns') > -1);
会返回false
?
答案 0 :(得分:3)
如果hostnames
是一个数组,那么hostnames.indexOf('awsdns')
正在寻找完全匹配(整个字符串)'awsdns'
的条目。
要查找数组中的子字符串,请使用some
:
console.log(hostnames.some(function(name) {
return name.indexOf('awsdns') > -1;
});
或者使用ES6语法:
console.log(hostnames.some((name) => name.indexOf('awsdns') > -1));
直播示例:
var a = ['12.foo.12', '21.bar.21', '42.foo.42'];
// Fails there's no string that entirely matches 'bar':
snippet.log(a.indexOf('bar') > -1);
// Works, looks for substrings:
snippet.log(a.some(function(name) {
return name.indexOf('bar') > -1;
}));
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
答案 1 :(得分:1)
试
hostnames[0].indexOf('awsdns') > -1;
由于主机名是一个数组,因此您需要检查实际主机名的索引,而不是数组。
请注意,这只有效,因为您已经说过如果任何条目都有子字符串,那么它们都会。 (这是非常不寻常的。)否则,如果第一个条目没有,但后续条目没有,则会失败。