我在这里假设您的路线是按以下顺序声明的:
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
如果确实如此,那么以下建议成立:
这里的问题是 app.get('/*', ...) 将拦截所有匹配的请求,这基本上就是一切。您的静态中间件将没有机会提供文件。
如果您删除该路由,index.html
那么目录中已经存在的东西应该对您有用,public
并且可以由静态中间件提供服务。
有关其工作原理的良好解释,请参阅此问题的答案:node.js / express.js - app.router 如何工作?
基于上述问题的补充更新:
您已将此声明为服务器的当前行为:
似乎客户端要求的所有 javascript 都与 index.html 文件信息一起下载。
你问了这个问题:
如何成功下载 CSS/JS 静态文件?
有这个要求
我希望任何路由上对服务器的所有请求都将获得 index.html 以及与之相关的所有 JS&CSS。
你的问题和要求是相互对立的。服务器将准确地将您告诉/配置它的内容发送回客户端。它要么总是发回index.html
正是你的要求所陈述的,要么它会成功地提供index.html
它所引用的任何 CSS/Javascript,这就是你原来的问题陈述。
在您下面的评论之一中,您已经说过:
我想这样做的原因是因为我正在使用模板,并且 index.html 包装了每个模板。我在客户端上使用 angular,我开始意识到我必须使用渲染引擎才能实现这一点。同样,我的角度客户端定义了部分 url,当它发送请求到:'/partial/sample'时,我需要 index.html 来包装'sample.html'
我基于此陈述的假设(如有错误请更正)
- 您正在使用客户端模板
- 您从服务器检索的文件是静态的(即,它们需要按原样从服务器提供)
- 您的路线目前按此顺序声明
- app.use(app.router);
- app.use(express.static(path.join(__dirname, 'public')));
- 你没有做任何服务器端模板(即一切都位于
public
某处)
如果这些假设是正确的,解决方法是按照我最初的建议并删除这条路线:
app.get('/*', index);
如果你这样做(假设你的资源被正确引用):
- 您
index.html
将通过静态中间件从服务器中按原样检索。
- 您在 index.html 中引用的每个 css/js 文件都将通过静态中间件从服务器返回
- 任何加载模板文件的请求(例如
sample.html
)都将由您的静态中间件处理并返回给客户端而不进行修改