我無法設置我的應用程序的中間件,以便它爲我的一些靜態文件(如css和js)提供服務。我希望能夠在我的index.html中包含位於公共目錄內的我的css和js文件。設置express以啓用靜態css和js文件
This is a picture of my current file structure.
這是我的Express服務器的代碼。
server.js
var express = require('express');
var path = require('path');
var app = express();
//config
app.set('views', __dirname + '');
app.engine('html', require('ejs').renderFile);
//app.use(express.static(__dirname + '/')); worked when everything was in jqtest
app.use(express.static(__dirname + '/public'));
//routes
app.get('',function(req,res){
res.render('../public/views/index.html')
});
app.env
//server
app.listen(process.env.PORT || 5000);
console.log('app live in 5000');
這些都是我想在我的index.html使用SRC標籤,但不工作。我知道我可能需要爲位於組件中的jquery文件另外設置一個app.use。
的index.html
<link rel="stylesheet" type="text/css" href="/public/css/style.css"/>
<script type="text/javascript" src="/components/jQuery/dist/jquery.js"></script>
<script type="text/javascript" src="/public/js/myJS.js"></script>
編輯1 我已經作出了github上這個PROJ公衆。它可以Here
編輯2
這已經回答了。非常感謝teleaziz和7zark7幫助指導我完成此過程。
解決方案:
第1步:
所以根主任外刪除你的應用服務器代碼時,問題在於__dirname不是一個全局變量。爲我的靜態文件設置路由的第一步是告訴我的服務器什麼時候是新的根目錄。我加入這行代碼由teleaziz提供這樣做
var root = path.normalize(__dirname + '/..');
第2步:
一旦我這樣做,我不得不改變路線供市民使用root,而不是__dir通過teleaziz的建議
app.use(express.static(root + '/public'));
第3步:
一旦完成我按照teleaziz和7zark7的建議從我的index.html中的src中刪除/ public /。我的新的src標籤工作看起來像這樣。
<link rel="stylesheet" type="text/css" href="/css/style.css"/>
<script type="text/javascript" src="/components/jQuery/dist/jquery.js"></script>
<script type="text/javascript" src="/js/myJS.js"></script>
嘿,謝謝你的建議。我已經實施了上面提供的更改。不幸的是,我的應用程序仍然無法在公共目錄中獲得我的css和js文件。[這裏是包含您所做更改的新server.js的鏈接](http://pastebin.com/nrz51Ri2)。我保持src標籤與上面列出的一樣。感謝您的時間 - 弗雷德 – tilted
思考它,其實第一個答案應該工作, 也許我錯過了一些東西: 如果你在jqtest/server/server.js,你想訪問jqtest/public /然後'path.normalize(__ dirname +'/ ..')'應該可以工作 – teleaziz
嘿,我剛剛試過你編輯的答案。這也是不成功的。如果您想克隆,我已將我的git hub資源庫公開。 [這是一個鏈接到存儲庫。](https://github.com/fredk212/jqtest)謝謝你的一切,-Fredk – tilted