2016-12-02 69 views
1

嗨,我是一個新手,最近開始瞭解節點。我在websockets上使用了Heroku教程(https://devcenter.heroku.com/articles/node-websockets),並將其改編爲我正在開發的特定項目。在示例代碼中,有一個index.html文件帶有一些嵌入式JavaScript。我將這個腳本移出一個單獨的文件並在HTML中引用它。一切工作正常本地,但不工作時,我部署到Heroko。我與Heroku非常有幫助的團隊聊天,他告訴我我的服務器端代碼將所有文件作爲HTML提供,我需要更改代碼。他們給了我一些指示,我儘可能多地嘗試了幾天,但無濟於事。最後,他們建議來這個論壇作爲解決問題的一種方式,因爲它超出了他們的範圍。這提供了index.html文件中的現有代碼如下:從express/node.js應用程序提供靜態文件

const express = require('express'); 
const SocketServer = require('ws').Server; 
const path = require('path'); 
const PORT = process.env.PORT || 3000; 
const INDEX = path.join(__dirname, 'index.html'); 
const server = express() 
.use((req, res) => res.sendFile(INDEX)) 
.listen(PORT,() => console.log(Listening on ${ PORT })); 

起初我編輯這包括行:

app.use(express.static('public')) 

但這並沒有工作。然後我修改爲,它仍然不工作:

const INDEX = path.join(__dirname, 'index.html'); 
const JS = path.join(__dirname, 'client.js'); 

const server = express() 
.use((req, res) => { 
res.sendFile(INDEX); 
res.sendFile(JS); 

我已經看過了,當我在隔離運行它們,但是當我嘗試去適應我上面的代碼根本不會按照這種工作的其他教程。如果有人能指出我正確的方向,我會很感激。

順便說一句,這是什麼樣的Heroku告訴我:

「來解釋遠一點此錯誤未捕獲的SyntaxError:意外的標記<是因爲http://thawing-journey-33085.herokuapp.com/client.js的網址是不是服JavaScript文件而是試圖服務這表明你的應用程序中有一個你需要查看的路由問題,這可能是因爲你的server.js文件在發送index.html文件之前沒有檢查任何特定的URL。 「

感謝

回答

1

我爲我的靜態文件是這樣的:

// define the folder that will be used for static assets 
app.use(Express.static(path.join(__dirname, '../public'))); 

// handle every other route with index.html, which will contain 
// a script tag to your application's JavaScript file(s). 
app.get('*', function (request, response){ 
    response.sendFile(path.resolve(__dirname, '../public', 'index.html')); 
}); 

這樣,我設置靜態文件夾中的express.static中間件,所以我可以提供文件服務。然後我重定向所有url請求到index.html

瞭解更多:express static

+0

嗨感謝您的迴應。我終於設法使用你的建議,但首先我必須重寫我的代碼,以刪除導致我的問題的JavaScript 6語法。如果有人感興趣,工作代碼如下:app.use('/',express.static(__ dirname)); (PORT,function(){ console.log(「Listening on port()」)在這個函數中, :「+ PORT); }) – LankyDonkey

+0

很高興幫助!你能回答正確的答案嗎?謝謝 – sendra

相關問題