当前位置: 首页 > 知识库问答 >
问题:

使用Express服务静态文件的最简单方法是什么?

钮鸿煊
2023-03-14

我使用了一种相当丑陋的方法:

var app = require('express')(),
    server = require('http').createServer(app),
    fs = require('fs');
server.listen(80);

path = "/Users/my/path/";

var served_files = {};
["myfile1.html","myfile2.html","myfile3.html"].forEach(function(file){
    served_files["/"+file] = fs.readFileSync(path+file,"utf8");
});

app.use(function(req,res){
    if (served_files[req.path]) 
        res.send(files[req.path]);
});

正确的方法是什么?

共有3个答案

朱皓
2023-03-14

正如这个问题的公认答案中提到的,我建议使用http服务器

它可以通过命令行启动,无需任何配置

cd /path/to/directory
http-server
戚衡
2023-03-14

如果您希望在不使用Express的情况下获得解决方案(正如您明确要求的“简单”),请查看节点静态模块。

它允许您提供一个文件夹,就像适合Express的中间件一样,但它也允许您只提供特定的文件。

最简单的情况是:

var http = require('http'),
    static = require('node-static');

var folder = new(static.Server)('./foo');

http.createServer(function (req, res) {
    req.addListener('end', function () {
        folder.serve(req, res);
    });
}).listen(3000);

如果您需要一些示例,请查看GitHub项目页面,其中有几个示例。

PS:您甚至可以在全局范围内安装node-estinal-并将其用作CLI工具,只需在您希望提供服务的文件夹内的shell中运行它:

$ static

就这样:-)!

PPS:关于您最初的示例,在这里使用流管道比同步加载所有文件要好得多。

别烨熠
2023-03-14

Express为此提供了内置中间件。它是connect的一部分,express就是基于此构建的。中间件本身使用send。

// just add the middleware to your app stack via `use`
app.use(express.static(yourpath));

对于您的评论,没有,没有办法手动选择文件。尽管默认情况下中间件将忽略前缀为的文件夹 ,例如名为的文件夹。将不提供隐藏的

要手动隐藏文件或文件夹,您可以在静态之前插入自己的中间件,以便在请求到达之前过滤掉路径。以下操作将阻止从名为隐藏的文件夹中提供任何文件:

app.use(function(req, res, next) {
  if (/\/hidden\/*/.test(req.path)) {
    return res.send(404, "Not Found"); // or 403, etc
  };
  next();
});
app.use(express.static(__dirname+"/public"));

 类似资料:
  • 问题内容: 我有一个使用socket.io和express的简单node.js应用程序。目前所有的javascript都在HTML文件中,但我想尝试将其分离为.js文件。 在我的主节点应用程序中,我有以下内容: 直到我将javascript从index.html移到.js文件,然后尝试从我的HTML文件中引用它,如下所示: 我认为express无法提供静态文件,因此我尝试了以下方法: 谁能告诉我我

  • 本文向大家介绍在windows上用nodejs搭建静态文件服务器的简单方法,包括了在windows上用nodejs搭建静态文件服务器的简单方法的使用技巧和注意事项,需要的朋友参考一下 在windows上用nodejs搭建一个静态文件服务器,即使你一点基础没有也能学会nodejs静态文件服务器的搭建,本文介绍的非常详细,很适合零基础入门的朋友学习。 首先安装nodejs: •新建一个node文件夹

  • 问题内容: 我想像通常那样处理静态文件,但像通常那样处理动态路由 其中一位开发人员在此评论中提出了解决方案,但我不清楚他的意思。 问题答案: 好的。我在Express的response object 的源代码中找到了一个示例。这是该示例的稍作修改的版本。 它使用该方法。 注意 :安全性更改要求使用此选项。

  • 问题内容: 我想知道用Java编写文本文件最简单(最简单)的方法是什么。请保持简单,因为我是初学者:D 我在网上搜索并找到了此代码,但我了解其中的50%。 } 问题答案: 在Java 7及更高版本中,一个使用Files的衬板:

  • 问题内容: 我正在用Java替代传统应用程序。要求之一是必须将旧应用程序使用的ini文件原样读取到新的Java应用程序中。此ini文件的格式是常见的Windows样式,带有标头部分和键=值对,使用#作为注释字符。 我尝试使用Java中的Properties类,但是如果不同的标头之间存在名称冲突,那当然是行不通的。 因此,问题是,读取此INI文件和访问密钥的最简单方法是什么? 问题答案: 我正在用J

  • 问题内容: 显然,我想避免将路径等硬编码到我的应用程序中,因此,我想制作一个设置文件来存储诸如字符串之类的简单内容。最简单的方法是什么?我在思考可可如何使用对象持久性的思路,但是似乎找不到任何等效的方法。 问题答案: 您可以使用通过java.util.Properties类处理的属性文件。