Не удается получить заголовки после их отправки (только для Windows?)

#node.js #express

#node.js #экспресс

Вопрос:

Я знаю, что этот вопрос уже задавался много раз, однако я провел день, читая об этом, и я все еще застрял. У меня есть следующая функция, которая уходит и выполняет get на локальном сервере.

     var http = require('http');
    var config = require('../config.js');

    exports.get_test_jobs = function(res, data) {

      var optionsget = {
        host: config.jobs_rest_host,
        port: config.jobs_rest_port,
        path: "/jobs3/jobtest",
        method: "GET"
      };

      var reqGet = http.request(optionsget, function(res) {
        res.setEncoding('utf-8');

        res.on('data', function(d) {
          return data.send(d);
        });

      });

      reqGet.end();
      reqGet.on('error', function(e) {
        console.error(e);
      });
    }

/* a few more functions along the same idea */
  

Это вызывается из моего server.js файл

 app.get('/jobs/test', jobs_hdlr.get_test_jobs);
  

Вот странный момент — кажется, это работает нормально, когда я запускаю это на unix (Mac и Ubuntu), это работает нормально, но когда я пытаюсь запустить это на своем Windows (рабочем) ПК, я получаю страшную ошибку «Не удается получить заголовки после их отправки». Может ли это быть связано с Windows? Или мне просто повезло с другими моими машинами?

Я использую express 3.12 — может ли это быть связано с этим? (Я думаю, что Express 4.4 сейчас отсутствует… Вероятно, мне следует обновить, но многие вещи были удалены)

(Просто для ясности, сейчас я всегда запускаю сервер rest с того же компьютера, этап 2 будет заключаться в размещении этого где-то в другом месте)

Ответ №1:

События ‘data’ могут передаваться более одного раза (что, скорее всего, и происходит в вашем случае). Никогда не предполагайте, что он будет отправлен только один раз.

Комментарии:

1. Да, вы попали в точку, изменение кода, чтобы он не полагался на данные, которые были там только один раз, похоже, сработало — спасибо!

2. Кроме того, вы должны просто иметь возможность просто делать res.pipe(data); вместо ручной отправки отдельных фрагментов данных или буферизации и отправки одного фрагмента.