2016-07-01 8 views
0

Чтобы показать мои студенты простой запрос HTTP и ответ, что они могли бы захватить с помощью Wireshark, я взбитыми простой Node.js HTTP сервер:Отправка одного пакета ответа HTTP в Node.js

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

var port = 80; 
var file = process.argv[2]; //This file contains a 42 byte HTML page 

http.createServer(function (req, res) { 
    res.writeHead(200, { 'content-type' : 'text/html' }); // Sends first packet 
    fs.createReadStream(file).pipe(res); // Sends second packet 
}).listen(port); 

К сожалению , две строки, передающие HTTP-заголовок и HTML, отправляются как два отдельных TCP-пакета (хотя они оба довольно малы). Для моих учеников было бы проще, если бы HTTP-заголовок и HTML были всего лишь одним пакетом. Как я могу изменить свой код, чтобы сделать это?

ответ

0

попробовать использовать что-то как-

var file = process.argv[2]; 
fs.readFile(file, function (err, html) { 
if (err) { 
    throw err; 
}  
http.createServer(function(request, response) { 
    response.writeHeader(200, {"Content-Type": "text/html"}); 
    response.write(html); 
    response.end(); 
}).listen(8000); 
}); 
+0

Я ценю ваш ответ, но я пробовал этот подход, и он, похоже, не работает. – petehern

1
var http = require('http'); 
var fs = require('fs');  
var file = process.argv[2]; 

http.createServer(function(request, response) { 
    response.writeHeader(200, {"Content-Type": "text/html;"}); 
    fs.readFile(file, function (err, html) { 
     if (err) { 
      throw err; 
     }  
     response.write(html); 
     response.end(); 
    }); 
}).listen(8000); 

причина, это не будет работать, что Node.js работает все асинхронно. Когда вы загружаете свой html-файл, создание сервера начинается в одно и то же время. К тому времени, когда вы собираетесь написать свой html для своего сокета tcp, файл, скорее всего, не будет готов.


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

+0

Спасибо, но я не уверен, что ты прав. Если бы вы были, то передача строки будет работать нормально (так как нам не придется ждать по чтению файла). – petehern