2016-11-09 111 views
1

我做了一个html5游戏(使用GameMaker),它由一个index.html和一个包含游戏依赖关系的javascript html代码和资源组成的文件夹“html5game”组成。问题是资源是相当多种多样的(声音,精灵等)和客户需要他们都玩。发送整个文件夹的内容到客户端快递

我正在寻找一种方法将它们全部发送,而无需专门命名它们。

我试图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 

如果您有其他的解决办法,我一个也有兴趣。谢谢你的回答!

回答

2

您将无法使用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文件正确,例如有:在上面的例子布局的情况下

<script src="/html5game/xxx.js"></script> 

中的顶级目录和您的静态资产(其中有您的index.html)通常称为staticpublichtml但你可以叫它任何你喜欢,只要你使用了正确的路径在您的来电express.static()

如果您想让您的游戏在根路径以外的某个路径中可用,那么您可以将其指定为app.use。例如,如果你改变了这个:

app.use(express.static(htmlPath)); 

这样:

app.use('/game', express.static(htmlPath)); 

然后,而不是这些网址:

这些URL将可用来代替:

很多人在这里都涉及到服务与快速静态文件的问题,所以我做了工作示例,并张贴在GitHub上,以便人们能有一个工作的出发点和去从那里:

见也有一些其他的答案,我谈论它的详细信息:

+0

谢谢,我测试并回来验证很快 –

+0

因此,有了这个解决方案,我必须创建一个我想要在服务器上的文件夹结构,每个都必须包含一个index.html? –

+0

@Aninternhasnoname是的,你可以在服务器上创建你想要的结构 - 例如'html'目录包含'game1','game2'等等,每个都有自己的'index.html'和一个带资产的子目录 - 这将是最简单的一个调用'app.use(express.static( ''或者你可能每场比赛只有一个呼叫:'app.use('/ game1',express.static(pathToGame1Files));''和'app.use('/ game2',express.static( pathToGame2Files));'对你而言更加方便。你甚至可以混合这两种方式,但注册路径的顺序将很重要。 – rsp

相关问题