#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);
вместо ручной отправки отдельных фрагментов данных или буферизации и отправки одного фрагмента.