res.sendfile()不提供javascripts
我想使用静态文件服务没有任何渲染引擎。 我试过使用:
res.sendfile('public/index.html');
在'/'GETpath上,并在我的路由上为静态文件表示中间件:
app.use(express.static(path.join(__dirname, 'public')));
但似乎所有的客户端要求的JavaScript与index.html文件信息下载。
如何成功下载CSS / JS静态文件?
更新:
这里是“res.sendfile …”的路由:
app.get('/*', index);
我希望在任何路由上的服务器的所有请求将得到index.html
和所有的JS&CSS assosiciated与。
我想这可能会帮助你…
在app.js
文件中…
app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); app.use("/styles", express.static(__dirname + '/public/stylesheets')); app.use("/scripts", express.static(__dirname + '/public/javascripts')); app.use("/images", express.static(__dirname + '/public/images')); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/', function (req, res) { res.sendfile(__dirname + '/public/home.html'); });
保存/public
文件夹中的home.html
和/public/javascripts
JavaScript文件, /public/javascripts
images中的/public/images
, /public/stylesheets
文件夹中的css文件。
在HTML文件中,引用应该是你定义的单词(例如:/ scripts
/home.js)…就像这样
<link rel="stylesheet" type="text/css" href="/styles/home.css" > <script src="/scripts/home.js" type="text/javascript"></script>
var express=require("express"); var app=express(); app.use('/', express.static(__dirname + '/website/views/')); app.set("views",__dirname+'/website/views'); app.get("/",function(req,res){ res.sendfile('index.html'); });
上面的代码是mine.i希望能帮助你。
为什么不是这样的?
if(req.url == '/') { // Root lookups appear to be mapped to index.html next(); } else { fname = [disk location of your website] + req.url; fs.open(fname, 'r', function(err, fd) { if(err) { next(); } else { fs.close(fd); res.sendfile(fname); } }); }
那么最简单的解决scheme就是移动app.use(express.static(path.join(__dirname, 'public')))
在调用app.use(app.router);
之前调用app.use(app.router);
这样,静态中间件在app.get('/*', index);
我在这里做了一个假设,你的路线是按这个顺序声明的:
app.use(app.router); app.use(express.static(path.join(__dirname, 'public')));
如果确实如此,那么下面的build议成立:
这里的问题是app.get('/ *',…)会拦截所有匹配的请求,这基本上是一切。 您的静态中间件将无法获得提供文件的机会。
如果你删除了这条path,那么事情应该适合你,因为index.html
已经在public
目录中,并且可以由静态中间件来提供服务。
有关如何工作的一个很好的解释,请看这个问题的答案: node.js / express.js – app.router如何工作?
更新基于上述问题的补充:
你已经说过这是你的服务器的当前行为:
它似乎像客户端要求的所有的JavaScripts下载与index.html文件信息。
你问了这个问题:
如何成功下载CSS / JS静态文件?
有这个要求
我希望在任何路由上的服务器的所有请求将得到index.html和所有的JS&CSS assosiciated与。
你的问题和要求是相互对立的。 服务器将完全发送给客户端,告诉/configuration它。 它要么始终发回index.html
,这正是您的要求所指出的,要么会成功地提供index.html
和任何CSS / JavaScript引用这是你原来的问题是什么。
在下面你的评论之一,你已经说:
我想这样做的原因是因为我正在使用模板,并且index.html包装每个模板。 我在客户端上使用angular度,我开始意识到,我将不得不使用渲染引擎来实现这一点。 同样,我的angular客户端定义了部分url,当它发送请求到:'/ partial / sample'我需要index.html包装'sample.html'为例
基于这个陈述我的假设(如果错误请纠正)
- 您正在使用客户端模板
- 您从服务器中检索的文件是静态的(即,它们需要像服务器一样提供)
- 您的路线目前按此顺序进行声明
- app.use(app.router);
- app.use(express.static(path.join(__ dirname,'public')));
- 你没有做任何服务器端模板(即一切都位于
public
地方)
如果这些假设是正确的,修复是做我最初的build议,并删除这条路线:
app.get('/*', index);
如果你这样做( 假设你的资源被正确引用 ):
- 您的
index.html
将通过静态中间件从服务器获取。 - 您在index.html中引用的每个css / js文件都将通过静态中间件从服务器返回
- 加载模板文件(比如
sample.html
)的任何请求都将由您的静态中间件提供服务,并且无需修改就返回给客户端