我想在没有任何渲染引擎的情况下使用静态文件服务.我试过用:
res.sendfile('public/index.html');
Run Code Online (Sandbox Code Playgroud)
在'/'GET路由上,并在我的路由上表示静态文件的中间件:
app.use(express.static(path.join(__dirname, 'public')));
Run Code Online (Sandbox Code Playgroud)
但似乎客户端要求的所有javascripts都是使用index.html文件信息下载的.
如何成功下载CSS/JS静态文件?
更新:
这是"res.sendfile ..."的路由:
app.get('/*', index);
Run Code Online (Sandbox Code Playgroud)
我希望在任何路由上对服务器的所有请求都会得到,index.html并且它的所有JS和CSS都会被关联.
小智 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');
});
Run Code Online (Sandbox Code Playgroud)
保存home.html里面/public的文件夹和JavaScript文件中/public/javascripts,在图像/public/images,CSS文件的/public/stylesheets文件夹.
在HTML文件中,引用应该是您定义的单词(例如://scriptshome.js)......就像这样
<link rel="stylesheet" type="text/css" href="/styles/home.css" >
<script src="/scripts/home.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
dc5*_*dc5 -1
我在这里假设您的路线是按以下顺序声明的:
\n\napp.use(app.router);\napp.use(express.static(path.join(__dirname, \'public\')));\nRun Code Online (Sandbox Code Playgroud)\n\n如果情况确实如此,那么以下建议成立:
\n\n这里的问题是 app.get(\'/*\', \xe2\x80\xa6) 会拦截所有匹配的请求,这基本上就是一切。您的静态中间件将无法提供文件服务。
\n\n如果您删除该路由,那么事情应该可以为您工作,因为目录index.html中已经存在public并且可以由静态中间件提供服务。
有关其工作原理的详细解释,请参阅此问题的答案:node.js /express.js - app.router 如何工作?
\n\n根据上述问题的补充进行更新:
\n\n您已将其声明为服务器的当前行为:
\n\n\n\n\n看起来客户端要求的所有 javascript 都是与 index.html 文件信息一起下载的。
\n
你问了这样的问题:
\n\n\n\n\n如何成功下载 CSS/JS 静态文件?
\n
有了这个要求
\n\n\n\n\n我希望任何路由上对服务器的所有请求都将获得index.html 及其关联的所有 JS&CSS。
\n
你的问题和要求是相互矛盾的。服务器将准确地将您告诉/配置的内容发送回客户端。它要么总是发回index.html您的要求所陈述的内容,要么它将成功提供index.html它引用的所有CSS/Javascript,这就是您最初的问题陈述。
在下面的评论之一中,您曾说过:
\n\n\n\n\n我想这样做的原因是因为我正在使用模板,而 index.html 包装了每个模板。我在客户端上使用 Angular,并且我开始意识到我必须使用渲染引擎才能实现这一目标。同样,我的角度客户端定义了部分 url,当它将请求发送到:\'/partial/sample\' 时,我需要 index.html 来包装 \'sample.html\' 例如
\n
我基于此陈述的假设(如有错误,请纠正)
\n\npublic某处)如果这些假设是正确的,解决方法是执行我最初建议的操作并删除此路线:
\n\napp.get(\'/*\', index);\nRun Code Online (Sandbox Code Playgroud)\n\n如果您这样做(假设您的资源被正确引用):
\n\nindex.html将通过静态中间件从服务器按原样检索。 sample.html)都将由您的静态中间件提供服务并返回给客户端而不进行修改| 归档时间: |
|
| 查看次数: |
25916 次 |
| 最近记录: |