Получение ошибки как «Ошибка: невозможно установить заголовки после их отправки» в моей службе node.js - PullRequest
0 голосов
/ 30 апреля 2018

Ниже мой код,

app.get("/getList", function (req, resp) {
    process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
    var client = ldap.createClient({
        url: 'ldap://my_ip:389'
    });

    client.bind('cn=pratik', 'pratik', function (err) {
        return resp.send(err);
    });

    var opts = {
        filter: '(objectclass=classToSearch)',
        scope: 'sub',
        attributes: ['ipaddress']
      };
      var entries= {};
      var i=0;
      client.search('o=a', opts, function(err, res) {


        res.on('searchEntry', function(entry) {
          console.log('entry: ' + JSON.stringify(entry.object));
            oxe[i] = entry.object;
            i++;
        });
        res.on('end', function(result) {
            console.log("pratik");
            console.log(entries);
            return resp.send(entries);
          });
});

Здесь, когда я печатаю записи, он показывает правильный результат, но не отправляет ответ. Я вижу ошибку как «Ошибка: невозможно установить заголовки после их отправки». ниже полная ошибка:

_http_outgoing.js:357
throw new Error('Can\'t set headers after they are sent.');
^

Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)

Как я могу устранить эту ошибку?

1 Ответ

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

Это потому, что вы звоните resp.send дважды: в обратном вызове client.bind и в обратном вызове res.on("end").

Я бы предложил поместить второе задание в обратный вызов bind, чтобы вы могли проверить ошибку, и если она есть, вы остановитесь на этом.

Если это удастся, тогда я пошлю entries.

app.get("/getList", function(req, resp) {
  process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
  var client = ldap.createClient({
    url: 'ldap://my_ip:389'
  });

  client.bind('cn=pratik', 'pratik', function(err) {
    if (err) return resp.send(err);
    var opts = {
      filter: '(objectclass=classToSearch)',
      scope: 'sub',
      attributes: ['ipaddress']
    };
    var entries = {};
    var i = 0;
    client.search('o=a', opts, function(err, res) {
      res.on('searchEntry', function(entry) {
        console.log('entry: ' + JSON.stringify(entry.object));
        oxe[i] = entry.object;
        i++;
      });
      res.on('end', function(result) {
        console.log("pratik");
        console.log(entries);
        return resp.send(entries);
      });
    });
  });
});
...