我无法设置我的应用程序的中间件,以便它为我的一些静态文件(如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