2014-01-30 26 views
1

我希望将所有请求都重定向到位于Views文件夹中的index.ejs视图。在我routes.js文件,我已经添加了这一点:Express:使用ejs时未找到静态文件

module.exports = function (app) { 

    app.get('/', function(req, res) { 
    res.render('index', {title: "TODO"}) 
}); 
} 

索引视图包含所有页面的标记,因为它会做个SPA,所以我会动态替换在客户端的看法。

的问题是,我引用位于公共文件夹中的脚本,他们都没有找到,我收到了404:

script src="public/app/app.js"></script> 

我想这是因为快递不知道如何服务器上的文件。我指定,一切都在公共文件夹应该是静态文件:

app.use(express.static(config.root + '/public')) 

现在,如果我不使用EJS模板,如果我使用一个index.html文件在公用文件夹,而不是一个视图,它工作正常。我只是要做到这一点,而不是:

app.get('*', function(req, res) { 
    res.sendfile('./public/index.html'); 
}); 

但我想利用EJS模板添加捆绑页面,而不是将脚本添加一个接一个。

那么我的代码有什么问题?我怎样才能解决404文件的JavaScript文件?

+0

如果您在动态路由之后使用静态路由作为静态文件,您是否期望动态路由不匹配?不知道我明白了,但为什么如果一切都是静态的,你甚至还需要路线? – adeneo

+0

只有JavaScript和其他资源(CSS,图像)是静态的。只有一条路径通向同一视图(index.ejs),因为它是单页应用程序。但是,当我将请求重定向到一个视图时,似乎不再找到静态资源。 – Sam

+0

静态资源的路径是否正确?你只是在浏览器中得到404,或者你在节点控制台中有错误吗? – adeneo

回答

1

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

我认为这就是静态中间件的工作原理。