【发布时间】:2014-02-23 00:13:31
【问题描述】:
我希望将我的所有请求重定向到位于 Views 文件夹中的 index.ejs 视图。在我的 routes.js 文件中,我添加了这个:
module.exports = function (app) {
app.get('/', function(req, res) {
res.render('index', {title: "TODO"})
});
}
索引视图包含页面的所有标记,因为它将是一个 SPA,因此我将在客户端动态交换视图。
问题是我引用了位于公用文件夹中的脚本,但没有找到它们,我得到一个 404 :
script src="public/app/app.js"></script>
我认为这是因为 Express 不知道如何提供文件。我已经指定公用文件夹中的所有内容都应该是静态文件:
app.use(express.static(config.root + '/public'))
现在,如果我不使用 ejs 模板,并且在公共文件夹中使用 index.html 文件而不是视图,则它可以正常工作。我只需要这样做:
app.get('*', function(req, res) {
res.sendfile('./public/index.html');
});
但我想利用 ejs 模板向页面添加捆绑包,而不是一一添加脚本。
那么我的代码有什么问题?如何解决 javascript 文件上的 404 问题?
【问题讨论】:
-
如果您在动态路由之后为静态文件使用静态路由,您是否希望动态路由不匹配?不知道我明白了,但如果一切都是静态的,你为什么还需要路线?
-
只有 javascript 和其他资源(css、图像)是静态的。因为它是一个单页应用程序,所以只有一个路由到同一个视图 (index.ejs)。但是,当我将请求重定向到该视图时,似乎不再找到静态资源。
-
静态资源的路径是否正确?你只是在浏览器中得到 404,还是在 Node 控制台中出现错误?
-
chrome 和 node 控制台都在资源 /public/app/app.js 上显示 404。
-
那么路径不正确,要么你的文件不存在,要么你的路径错误,或者静态中间件不工作,很难说。
标签: node.js angularjs express ejs