0

尽管ldapjs 文档中涵盖了分页,但我不清楚如何使用 ajax 客户端在我的应用程序中实现分页。假设我对服务器进行了一个简单的调用,以在 LDAP 中搜索组织中的所有人员,最初是在具有 10 个条目的第一页中搜索,如下所示:

$.ajax({
  method: "GET",
  url: "LDAPSearch",
  data: {
    filter: "(ou=People)",
    pageNum: 1,
    entriesPerPage: 10
  }
}).done(function( result ) {
  console.log('result: ', result);
});

我希望服务器发回包含前 10 个条目的结果以及搜索产生的条目总数,以便我知道会有多少页。在服务器上的 ldapjs 代码中,我希望 pageNum 的 opts 中有一个参数,例如:

var opts = {
  filter: '(objectclass=commonobject)',
  scope: 'sub',
  paged: true,
  pageNum: 1, //This is not a valid option, but how I would expect it to work
  sizeLimit: 10
};
client.search('o=largedir', opts, function(err, res) {
  assert.ifError(err);
  res.on('searchEntry', function(entry) {
    // do per-entry processing
  });
  res.on('page', function(result) {
    console.log('page end');
  });
  res.on('error', function(resErr) {
    assert.ifError(resErr);
  });
  res.on('end', function(result) {
    console.log('done ');
  });
});
4

1 回答 1

0

您将在此处找到所需的信息。

...并将通过 searchEntry 事件输出所有结果对象。在操作期间的每个结果结束时,也会发出一个页面事件......

所以使用searchEntry事件将结果添加到集合中,例如:

res.on('searchEntry', function(entry) {
  resultArray.push(entry.object);
});

...如果达到 sizeLimit (of page),则使用page事件继续下一页。

res.on('page', function(res, cb) {
  if (cb) {
    cb.call();
  } else {
    // search is finished, results in resultArray
  }
});

请记住,LDAP 服务器通常会默认或配置限制搜索。500 是常用的默认值。另见http://www.openldap.org/doc/admin24/limits.html

于 2017-04-15T10:38:55.640 回答