最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Node.js计时wactivedirectory包

IT培训 admin 2浏览 0评论

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, 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, 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, user.sAMAccountName]);
  }
  //all done
  console.log(groupMembers);
})()

(但是这将继续一个请求)

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, 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, 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, user.sAMAccountName]);
  }
  //all done
  console.log(groupMembers);
})()

(但是这将继续一个请求)

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论