当有人尝试实现自己的静态文件服务器而不是使用Express或有效的方法而无法使其工作时,我在Stack
Overflow上看到了很多类似的问题。如果可以实现自己的静态文件服务器,请执行此 *** 作。如果不能,那么这可能表明它不是一个好主意。
更新:请参阅以下内容,了解不使用Express的解决方案。
仅仅看一下您的代码,我已经看到了几个严重的问题,包括:
您的代码 不安全 -它允许任何人在您的系统上获取任何文件。
您的代码正在 阻止 -一旦获得任何并发连接,它将立即停止。
您的代码不适用于 二进制文件 -仅适用于文本文件,以及仅适用于UTF-8编码的文件
您的代码不适用于 大写文件名 ,
.jpeg
扩展名等。您的代码无法正确提供 HTML 文件
当文件不存在而不是使用正确的代码响应时,代码 崩溃
回答这样的问题的人有两种选择:要么花费大量的精力和时间来解决上面提到的每个问题(这种情况很少发生,因为这不是一项琐碎的任务,这就是为什么您只看到评论中提到一个或一个问题的原因。其中两个问题而不是答案),
或者 您可以解释应如何正确完成任务,而不是对最初不是一个好主意的事情添加无数次修复。
话虽这么说,您可以通过安全高效的方法来实现目标的方法是将您的静态文件(HTML,CSS,图像等)放入一个目录,例如
html并使用Express(或其他一些框架)如下所示),并带有以下简单代码:
var path = require('path');var express = require('express');var app = express();var htmlPath = path.join(__dirname, 'html');app.use(express.static(htmlPath));var server = app.listen(80, function () { console.log('listening on port', server.address().port);});
查看完整的示例,并在GitHub上进行说明:
- https://github.com/rsp/node-express-static-example
我将这个示例放在GitHub上是因为Stack
Overflow上存在许多与人们在Node中提供静态文件有关的问题。它是开源的,您可以使其适应自己的需求并在代码中使用。
有关Express的更多信息,请参见:
- http://expressjs.com/en/4x/api.html
您可以用来提供静态文件的其他框架包括:
- 兴亚,的RESTify,哈皮,帆,环回和更多。
如果您仍然不希望使用能够正确完成工作的高级框架,并且想推出自己的解决方案(可能出于教育目的),
它说明了如何通过以下方式提供静态图片:
express.static
(express
内置的中间件,就像这个答案)express
(express
但没有express.static
)connect
(低于的一级express
)http
(使用Node的http
模块)net
(甚至不使用http
模块)
发布的所有示例均经过测试,可在节点版本4、5、6和7上运行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)