【问题标题】:Express: static files not found when using ejsExpress:使用ejs时找不到静态文件
【发布时间】: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


【解决方案1】:

知道了。脚本文件的路径不正确。它应该是 app/app.js 而不是 public/app/app.js

我认为这就是静态中间件的工作方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多