2017-07-19 177 views
1

我想创建一个简单的Node.js服务器并使用pipe()方法发送数据。但我有一个问题。刷新Node.js页面时不加载

第一次启动服务器时会加载页面,但当我刷新页面时,页面会变为空白。我的意思是数据没有加载。为什么会发生?

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

var myReadStream = fs.createReadStream(__dirname + '/input.txt', 'utf8'); 


http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    myReadStream.pipe(res); 
}).listen(3300); 

回答

2

,如果你将它更改为这会工作:

http.createServer(function (req, res) { 
    var myReadStream = fs.createReadStream(__dirname + '/input.txt', 'utf8'); 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    myReadStream.pipe(res); 
}).listen(3300); 

这是因为一旦读取流不会自动复卷(事实上它不能)。

但它不是服务静态内容的最灵活的方式。

请参阅此答案,了解使用和不使用Express的静态文件的五个示例,从使用高级框架到非常低级的手动重新创建轮子类型的实现。

+0

跌宕!我认为服务器每次都可以访问myReadStream变量,因为它是全局的。其实我并没有试图提供静态内容。我只是试图使用管道,并了解它的工作方式。 –

+1

@MertŞafak是的,它可以到达变量,它是全局的,但是一旦流被读取,所有后续请求都会看到相同的完成流。 – rsp

+0

@MertŞafak对流的引用仍然可用,但流本身[将已经结束](https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options),就像它在管道末尾所做的一样( )' – George