Javascript 使用express将整个文件夹内容发送到客户端

Javascript 使用express将整个文件夹内容发送到客户端,javascript,node.js,express,game-maker,Javascript,Node.js,Express,Game Maker,我制作了一个html5游戏(使用GameMaker),它由index.html和一个文件夹“html5game”组成,其中包含游戏的依赖项—javascript代码和资源。问题是资源非常多且多样(声音、精灵等),客户需要它们全部播放 我正在寻找一种方式,发送他们所有没有具体命名他们 我尝试了glob模块: var glob = require( 'glob' ); var files = glob.sync( './html5game/**' ).forEach( function(

我制作了一个html5游戏(使用GameMaker),它由index.html和一个文件夹“html5game”组成,其中包含游戏的依赖项—javascript代码和资源。问题是资源非常多且多样(声音、精灵等),客户需要它们全部播放

我正在寻找一种方式,发送他们所有没有具体命名他们

我尝试了glob模块:

var glob = require( 'glob' );    

var files = glob.sync( './html5game/**' ).forEach( function( file ) {
      require( path.resolve( file ) );
});
但一旦我这么做了,我就想不出用res.sendFile()发送文件的方法了

我试过了

var express = require('express');
var app = express();   

[...]

app.get('/aeronavale/jeu', function(req, res){
        res.sendFile(__dirname + '/aeronavale/index.html');
        res.sendFile(files)

});

[...]

app.listen(3000, function(){
    console.log('app started on port 3000, yeah !')
})
但它给了我一个错误:

TypeError: path argument is required to res.sendFile

如果你有其他的解决方案,我也很感兴趣。谢谢你的回答

您将无法使用
res.sendFile
发送多个这样的文件。在这里,您可以做的最简单的事情是:

将您的
index.html
文件和
html5game
目录放入一些公共目录,例如名为
html
的目录,并将其放在您拥有Node.js程序的位置。目录布局示例如下:

/home/you/yourapp:
- app.js (your node program)
- package.json (your package.json etc)
- html (a new directory)
  - index.html (your main html to serve)
  - html5game (the directory with other files)
    - (other files)
现在,在节点程序中,您可以使用如下内容:

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(3000, function () {
    var host = 'localhost';
    var port = server.address().port;
    console.log('listening on http://'+host+':'+port+'/');
});
这将为您的所有文件(包括
index.html
)提供如下地址:

  • (您的
    index.html
  • (你的资产)
当然,您仍然需要确保正确引用
index.html
文件中的资产,例如:

<script src="/html5game/xxx.js"></script>
为此:

app.use('/game', express.static(htmlPath));
然后,代替这些URL:

  • (您的
    index.html
  • (你的资产)
这些URL将变为可用:

  • (您的
    index.html
  • (你的资产)
这里有很多问题都与使用Express提供静态文件有关,因此我制作了一个工作示例并将其发布在GitHub上,这样人们就可以有一个工作起点并从那里开始:

另请参阅我在其中更详细讨论的其他一些答案:


解决方法是使用压缩目录,并在前端将其解压缩。

谢谢,我对此进行了测试,然后回来验证。因此,使用此解决方案,我必须在服务器上创建一个我想要的文件夹结构,并且每个文件夹结构必须包含index.html?@Aninternhasnoname Yes,您可以在服务器上创建所需的结构-例如,使用包含
game1
game2
等的
html
目录。每个目录都有自己的
index.html
和一个包含资产的子目录-这是最简单的,只需调用
app.use(express.static(htmlPath))-或者,您可以在每个游戏中调用一次:
app.use('/game1',express.static(pathToGame1Files))
app.use('/game2',express.static(pathToGame2Files))哪个对您更方便。您甚至可以混合使用这两种方法,但注册路径的顺序很重要。非常感谢!如果你好奇的话,这里是我刚刚上传的游戏:使用箭头和X,我还没有制作教程:)(如果你在评论发布后阅读了这么长时间,请注意链接可能不会永远可用)@Aninternhasnoname这是一个非常酷的游戏!)这让我想起了一款很棒的DOS游戏《愤怒的翅膀》——只有你的游戏是类固醇,而且难度更大很酷。完成教程后,在twitter上给我发一条短信——我在twitter上。继续努力!我很高兴能帮上忙。
app.use('/game', express.static(htmlPath));