Node.js计时w / activedirectory包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js计时w / activedirectory包相关的知识,希望对你有一定的参考价值。
我非常喜欢Node,但发现activedirectory包比任何其他Python模块都要好得多,因为它可以提取AD森林中的递归组成员,这是一个正确的工具。我以前用JS做过负荷,但显然这是一个不同的鱼。
基本上,我有以下几点:
var ad = new ActiveDirectory(config);
const groupName = 'CN=myGroupName*'
let group_members = []
ad.findGroups(groupName, function(err, groups) {
groups.forEach(function(group) {
ad.getUsersForGroup(group.dn, function(err, users) {
users.forEach(function(user) {
group_members.push([group.cn, user.sAMAccountName])
})
})
})
})
问题是这完全可行,但我需要做的下一件事就是将结果放入数据库但我无法正确地计时。我已添加此测试:
setTimeout(function() {
console.log(group_members)
return
}, 5000)
哪个有效,但显然不理想。
不幸的是,我坚持使用Node.js 6(使用AWS Lambda),因此甚至无法使用Promises AFAIK。有没有人有任何想法我怎么做到这一点?
答案
您需要将用户数组映射到在处理一个用户时解析的Promise数组,这样您就可以使用Promise.all等待所有Promise完成:
const done = new Promise(res => {
ad.findGroups(groupName, function(err, groups) {
res(Promise.all(groups.map(function(group) {
return new Promise(res => {
ad.getUsersForGroup(group.dn, function(err, users) {
users.forEach(function(user) {
group_members.push([group.cn, user.sAMAccountName])
});
res();
});
})));
});
});
所以你可以这样做:
done.then(() => console.log(group_members));
或者,您可以宣传API并使用新的async / await语法:
const {promisify} = require("util");
const findGroups = promisify(ad.findGroups);
const getUsersForGroups = promisify(ad.getUsersForGroups);
(async function(){
const groupMembers = [];
const groups = await findGroups(groupName);
for(const group of groups){
const users = await getUsersForGroups(group.dn);
for(const user of users)
groupMembers.push([group.cn, user.sAMAccountName]);
}
//all done
console.log(groupMembers);
})()
(但是这将继续一个请求)
以上是关于Node.js计时w / activedirectory包的主要内容,如果未能解决你的问题,请参考以下文章
我的消息在 node.js/discord.js 中重复了很多次
Raspberry Pi Zero W 上的 Node.js,依赖项不会自动下载