使用 fs.readFileSync() 提供 html 文件失败

Serve html file with fs.readFileSync() fails

本文关键字:html 文件 失败 提供 fs readFileSync 使用      更新时间:2023-09-26

我有这段代码(https://gist.github.com/2402116):

server.get('/', function(request, response) {
 var k = fs.readFileSync('./index.html','utf8');
 response.send( k );
});

尝试读取此文件:

https://gist.github.com/2402070

浏览器不断加载并且永无止境。

但是如果我从 html 文件中删除所有包含的 js 就可以正常工作。

我做错了什么?

您当前的服务器实现除了index.html对基本 url 的请求提供服务外,什么都不做,即 '/' .您将需要编写进一步的代码/路由来为index.html中包含的js请求提供服务,即 '/app.js''/js/'中的各种js文件。

现在,要点中的路由实现非常粗糙,不支持 url 匹配的许多方面。原始代码显然只是演示了一个没有资源的单页网站的概念。您将看到让您的代码工作很快就会变得繁琐,因为您实际上必须为每个资源请求编写一条路由,例如

server.get('/app.js', function(request, response) {
  var k = fs.readFileSync('./app.js','utf8');
  response.send( k );
});
server.get('/js/jquery-1.7.2.js', function(request, response) {
  var k = fs.readFileSync('./js/jquery-1.7.2.js','utf8');
  response.send( k );
});
etc...

您最好查看已经存在的节点.js url路由库(例如控制器)或Web框架,例如express,它内置了对路由(和静态文件服务)的支持。

将数据发送到浏览器后,您需要一个response.end()

实际上,由于您要一次发送所有数据,因此您可以将response.send(k)替换为 response.end(k) . 虽然不建议使用此方法。 我强烈建议异步读取文件并将其逐块发送到客户端。

另请参阅:http://nodejs.org/api/http.html#http_response_end_data_encoding

尝试在

k 上.toString,而不是发送而是.end

response.end( k.toString() ); 

也许发生了一些奇怪的事情,他试图评估代码