我想使用静态文件服务没有任何渲染引擎。 我试过用:
res.sendfile('public/index.html');
在'/'GET路由上,并在我的路由上表示静态文件的中间件:
app.use(express.static(path.join(__dirname, 'public')));
但是似乎客户端要求的所有javascripts都是使用index.html文件信息下载的。
如何成功下载CSS / JS静态文件?
更新
以下是“res.sendfile ...”的路线:
app.get('/*', index);
我希望在任何路由上对服务器的所有请求都会得到index.html
,并且所有的JS和CSS都会与之相关联。
答案 0 :(得分:18)
我想这可能对你有帮助......
在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');
});
将home.html
文件夹中的/public
文件夹和/public/javascripts
中的JavaScript文件,/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>
答案 1 :(得分:1)
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');
});
上面的代码是我的。我希望能帮到你。
答案 2 :(得分:0)
为什么不是这样的?
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);
}
});
}
答案 3 :(得分:0)
嗯,最简单的解决方案是移动app.use(express.static(path.join(__dirname, 'public')))
app.use(app.router);
之前
这样,静态中间件就会在app.get('/*', index);
答案 4 :(得分:-1)
我在这里假设您的路线按此顺序声明:
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
如果情况确实如此,则以下建议成立:
这里的问题是app.get('/ *',...)将拦截所有匹配的请求,这基本上就是一切。您的静态中间件无法提供文件服务。
如果删除该路由,那么事情应该适合您,因为index.html
已经在public
目录中,并且可以由静态中间件提供服务。
有关其工作原理的详细说明,请参阅此问题的答案:node.js / express.js - How does app.router work?
根据上述问题的补充进行更新:
您已将此声明为服务器的当前行为:
似乎客户端要求的所有javascripts都是使用index.html文件信息下载的。
您问过这个问题:
如何成功下载CSS / JS静态文件?
有此要求
我希望在任何路由上对服务器的所有请求都将获得index.html及其所有JS&amp; CSS与之相关联。
您的问题和要求彼此相反。服务器将向客户端发送与您告诉/配置的内容完全相同的内容。它将始终发送回index.html
,这正是您的要求所述,或者它将成功提供index.html
和它引用的任何CSS / Javascript,这是您原始的问题陈述。
在下面的一条评论中,您已说过:
我想要这样做的原因是因为我正在使用模板,而index.html包装了每个模板。我在客户端使用角度,我开始意识到我必须使用渲染引擎才能实现这一点。同样,我的角度客户端定义了部分URL,当它将请求发送到:'/ partial / sample'时,我需要index.html来包装'sample.html'作为实例
我的假设基于这个陈述(如果错误请更正)
public
某处)如果这些假设是正确的,那么修复就是按照我最初的建议去做并删除这条路线:
app.get('/*', index);
如果你这样做(假设你的资源被正确引用):
index.html
将通过静态中间件从服务器检索。 sample.html
)都将由您的静态middeware提供服务,并且无需修改即可返回给客户端