I am using nodejs with express. On a get-request to the root path I want to route to an index file. If there is a get-request to the path "/game" I want to route to a different source.
app.get('/', function(req, res){
res.render( "index", {locals : { myLocal : "myValue"}} );
});
app.get('/game', function(req, res){
res.render("/game/index", {locals : { myLocal : "myValue"}} );
});
The first "get" works nice but the second sends this exception:
500 Error: failed to locate view "/game/index"
at Function.exports.compile (D:\Webstorm\myExpress\node_modules\express\lib\view.js:61:15)
at ServerResponse.res._render (D:\Webstorm\myExpress\node_modules\express\lib\view.js:417:18)
at ServerResponse.res.render (D:\Webstorm\myExpress\node_modules\express\lib\view.js:318:17)
at exports.game (D:\Webstorm\myExpress\routes\index.js:12:9) at callbacks (D:\Webstorm\myExpress\node_modules\express\lib\router\index.js:272:11)
at param (D:\Webstorm\myExpress\node_modules\express\lib\router\index.js:246:11)
at pass (D:\Webstorm\myExpress\node_modules\express\lib\router\index.js:253:5)
at Router._dispatch (D:\Webstorm\myExpress\node_modules\express\lib\router\index.js:280:5)
at Object.middleware [as handle] (D:\Webstorm\myExpress\node_modules\express\lib\router\index.js:45:10)
at next (D:\Webstorm\myExpress\node_modules\express\node_modules\connect\lib\http.js:204:15)
This is my folder-structure:
views
|--- game
| |---index.jade
| |---layout.jade
|---index.jade
|---layout.jade
UPDATE ########
I checked express itself (file: "\express\lib\view.js", function:"_render") and printed out the local "options.root". The value is: "D:\Webstorm\myExpress/views".. that does not seem to be right. But I still wonder why the root-request works. I changed this line:
app.set('views', __dirname + '/views');
to this:
app.set('views', __dirname + '\\views');
with no success.
Since I work on a windows machine I have to use "\" instead of "/". I was confused about it because I dont have to care about that in the requests-paths ( app.get("/game",..) ) and not for the root index file. ( res.render("/"); )
The solution is:
app.set('views', __dirname + '\\views');
and
res.render('\\game\\index');
Try removing the locals
keyword from there and its corresponding braces.
Try removing the leading slash:
res.render("game/index", {locals : { myLocal : "myValue"}} );
or:
res.render("game\\index", {locals : { myLocal : "myValue"}} );
It is trying to find a file at /game/index
, instead of /directory/with/your/views/game/index
.