Как исправить ошибку «заголовки уже отправлены» в узле - PullRequest
0 голосов
/ 29 апреля 2019

Итак, я пытаюсь создать приложение для узлов, которое вызывает ldap serve, и аутентифицировать пользователей.В приведенном ниже коде приложение успешно подключается к серверу и обрабатывает запрос.Но когда я пытаюсь отправить ответ обратно, я получаю эту ошибку: throw new ERR_HTTP_HEADERS_SENT ('set');^

Ошибка [ERR_HTTP_HEADERS_SENT]: Невозможно установить заголовки после их отправки клиенту

Я не совсем уверен, почему это происходит.Я довольно новичок в ноде, экспрессе и ldap

// ldapjs required for ldap connection
const ldap = require('ldapjs');

//express required for exposing endpoints
const express = require('express');
const app = express();

const assert = require('assert');

var client = ldap.createClient({
  url: 'ldap://someserve.com'
});

//Search filter for users in the directory
var opts = {
  filter: '(&(objectCategory=person)(objectClass=user))',
  scope: 'sub',
};

//General Ldap serch user
var UserName = '123.test.com';
var Pass = '123longpass'

//Base URL
app.get('/', (req,res) => {
    res.send('hello from node')
});

//Get all ldap users
app.get('/api/ldapUsers', (req, res) => 
{
    client.bind(UserName, Pass, function (err) 
    {
        client.search('DC=sdf,DC=sdfa,DC=gdfgd', opts, function (err, search) 
        {
            search.on('searchEntry', function (entry) 
            {
                res.setHeader('Content-Type', 'application/json');
                var users = entry.object;
                console.log(users);

                res.json(users);
                res.end(); 
            });
        });
    });

   // client.unbind( err => {
   //     assert.ifError(err);
   // });
});

const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));

1 Ответ

0 голосов
/ 30 апреля 2019

Событие searchEntry вызывается один раз для каждого найденного элемента, что означает, что вы вызываете res.json несколько раз.

Попробуйте это:

app.get('/api/ldapUsers', (req, res) => 
{
    client.bind(UserName, Pass, function (err) 
    {
        client.search('DC=sdf,DC=sdfa,DC=gdfgd', opts, function (err, search) 
        {
            var users = [];
            search.on('searchEntry', function (entry) {
                users.push(entry.object); 
            });
            search.on('end', function (entry) {
                res.setHeader('Content-Type', 'application/json');
                console.log(users);

                res.json(users);
                res.end(); 
            });
        });
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...