2014-11-19 4 views
0

Как установить правильную длину буфера в ответе HTTP?Node.js Длина буфера

Я использую Express.js. Я не был в состоянии получить эту работу:

res.set('Content-Length', myBuffer.length); 

Обратите внимание, мне нужно установить его вручную, так как мне нужно, чтобы отправить его в запросе HEAD. Если я просто отправлю ответ HEAD без ручной настройки Content-Length для того, что будет размером тела запроса GET, то Content-Length будет установлен на что-то маленькое, как 2 против 14000.

+0

Почему это не работает? Это именно то, что вы должны делать. Ваша проблема в другом месте. – Brad

+0

В node.js есть разница между длиной в памяти и фактической длиной ... не будет ли это работать только «иногда»? –

+0

Нет, это всегда будет работать. Buffer.length всегда является длиной буфера, как вы видите. То, что происходит под капотом, не подвергается. – Brad

ответ

0

Ваш код должен выполнять эту работу, но вы не даете нам никаких подсказок о том, как вы получаете свой myBuffer.

Вот пример кода, который работает, если есть текстовый файл час: \ Temp \ text.txt

var http = require("http"); 
var fs = require("fs"); 

http.createServer(function (request, response) { 
    fs.readFile('H:\\Temp\text.txt', function(data, err) { 
     if (err) { 
      response.writeHead(404, { 
       "Content-Type": "text/plain" 
      }); 
      response.write(err); 
      response.end(); 
     } else { 
      response.writeHead(200, { 
       "Content-Type": "text/plain" 
       "Content-Length": data.length 
      } 
      response.write(data); 
      response.end(); 
     } 
    }); 
}).listen(80); 

Это работает, потому что данные правильный объект буфера. Если данные не являются объектом Buffer, а просто строкой или чем-либо еще, это не может работать. (Например, строка UTF-8 может иметь меньше символов, чем ее размер в байтах).

Смежные вопросы