2016-11-09 124 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