我试图用 NodeJS、ExpressJS 和 LdapJS 编写一个 RestfulAPI。我想做一个用户配置文件页面,用户能够在 LDAP 服务器上看到他的属性并可以更改它们。
如果我在请求 URL 中输入有效的 uid,服务器会成功找到用户并响应该用户的所需属性,例如可以通过浏览器和邮递员看到。我现在的问题是,如果给定的“uid”分别是用户本身在我的 LDAP 服务器上不存在,则站点会不断加载,并且不会发出任何错误或任何类型的响应......
这是我当前的代码:
const express = require('express');
const router = express.Router();
const ldap = require('ldapjs');
const client = ldap.createClient({
url: 'ldap://ldap.example.de:389',
timeout: 30000,
reconnect: true
});
client.bind('cn=readonly,dc=example,dc=de', 'secret', function(err){
if(err) throw err;
});
router.get('/:username', function(req, res) {
let opts = {
scope: 'sub',
filter: `(uid=${req.params.username})`,
// attributes: ['givenName', 'sn', 'jpegPhoto', 'mail', 'uid']
attributes: ['givenName', 'sn', 'mail', 'uid'] //example attributes (not final)
}
client.search('ou=User,dc=example,dc=de', opts, function(err, result) {
if(err) throw err;
result.on('searchEntry', function(entry){
res.send(entry.object);
});
result.on('searchReference', function(referral) {
console.log('referral: ' + referral);
});
res.on('error', function(err) {
console.error('error: ' + err.message);
});
res.on('end', function(result) {
console.log('status: ' + result.status);
});
});
});
我到处寻找解决方案或可能的问题,但找不到任何东西。所以我不得不问你们^^我希望你们能帮助我
在 Klaycon 的帮助下更新了代码:
const express = require('express');
const router = express.Router();
const ldap = require('ldapjs');
const client = ldap.createClient({
url: 'ldap://ldap.example.de:389',
timeout: 30000,
reconnect: true
});
client.bind('cn=readonly,dc=example,dc=de', 'secret', function(err){
if(err) throw err;
});
router.get('/:username', function(req, res) {
let opts = {
scope: 'sub',
filter: `(uid=${req.params.username})`,
// attributes: ['givenName', 'sn', 'jpegPhoto', 'mail', 'uid']
attributes: ['givenName', 'sn', 'mail', 'uid'] //example attributes (not final)
}
client.search('ou=User,dc=example,dc=de', opts, function(err, result) {
if(err) throw err;
result.on('searchEntry', function(entry){
res.send(entry.object);
});
result.on('searchReference', function(referral) {
console.log('referral: ' + referral);
});
result.on('error', function(err) {
console.error('error: ' + err.message);
});
result.on('end', function(resu) {
console.log('status: ' + resu.status);
if(resu.status != 0) res.status(404).send("User not found");
});
});
});