Error: Failed to lookup view "index" in views directory

Issue #8 resolved
Robert Brown created an issue

Walking through the May 2015 article Riding ExpressJs and Node.js to the Web, I ran into this error. The file index.jade seems to be in the right place. \

Error: Failed to lookup view "index" in views directory "/home/iusr0042/node-js/nodejs_expressjs/views"
   at EventEmitter.render (/home/iusr0042/node_modules/express/lib/application.js:579:17)
   at ServerResponse.render (/home/iusr0042/node_modules/express/lib/response.js:961:7)
   at /home/iusr0042/node-js/nodejs_expressjs/app.js:11:6
   at Layer.handle [as handle_request] (/home/iusr0042/node_modules/express/lib/router/layer.js:95:5)
   at next (/home/iusr0042/node_modules/express/lib/router/route.js:131:13)
   at Route.dispatch (/home/iusr0042/node_modules/express/lib/router/route.js:112:3)
   at Layer.handle [as handle_request] (/home/iusr0042/node_modules/express/lib/router/layer.js:95:5)
   at /home/iusr0042/node_modules/express/lib/router/index.js:277:22
   at Function.process_params (/home/iusr0042/node_modules/express/lib/router/index.js:330:12)
   at next (/home/iusr0042/node_modules/express/lib/router/index.js:271:10) 
// ---app.js---
var express = require('express')
var app = express()

app.set('views', __dirname + '/views');
// console.log('views',  __dirname + '/views');
app.set('view engine', __dirname + '/node_modules/jade');
// console.log('view engine',  __dirname + '/node_modules/jade');

app.get('/', function (req, res) {
 res.render('index', { title: 'Hey', message: 'Hello there!'})
})

 /* app.get('/', function (req, res) {
 res.send('Hello World')
}) */


app.listen(80)``

#!node

``` APP_JS Error.png

Comments (17)

  1. Aaron Bartell

    Hi Robert,

    You have this for the view engine:

    app.set('view engine', __dirname + '/node_modules/jade');
    

    and it should be this:

    app.set('view engine', 'jade')
    
  2. Robert Brown reporter

    When I used jade, I got the following error.

    $ node app.js views /home/iusr0042/node-js/nodejs_expressjs/views Error: Cannot find module 'jade'** at Function.Module._resolveFilename (module.js:336:15) at Function.Module._load (module.js:278:25) at Module.require (module.js:365:17) at require (module.js:384:17) at new View (/home/iusr0042/node_modules/express/lib/view.js:78:30) at EventEmitter.render (/home/iusr0042/node_modules/express/lib/application.js:569:12) at ServerResponse.render (/home/iusr0042/node_modules/express/lib/response.js:961:7) at /home/iusr0042/node-js/nodejs_expressjs/app.js:9:6 at Layer.handle [as handle_request] (/home/iusr0042/node_modules/express/lib/router/layer.js:95:5) at next (/home/iusr0042/node_modules/express/lib/router/route.js:131:13) ^C

  3. Aaron Bartell

    Please document the steps you are taking to run the program and the context. For example:

    $ ssh aaron@ibmi
    $ cd path/to/app/dir
    $ ls -all
    $ ls -all node_modules
    $ node app.js
    
  4. Robert Brown reporter

    here is the documentation. let me know if you need anything else

    Welcome to Secure Shell version 0.8.34.
    Answers to Frequently Asked Questions: http://goo.gl/TK7876
    Connecting to IUSR0042@V7R1DEV.IDEVCLOUD.COM...
    Loading NaCl plugin... done.
    IUSR0042@v7r1dev.idevcloud.com's password: 
    $ cd /home/iusr0042/node-js/nodejs_expressjs
    $ ls -all
    total 112
    drwxr-sr-x    4 iusr0042 0             12288 Mar  4 15:58 .
    drwxr-sr-x    3 iusr0042 0             12288 Mar  4 14:31 ..
    -rwxr-xr-x    1 iusr0042 0               473 Mar  4 15:58 app.js
    drwxr-sr-x    4 iusr0042 0              8192 Mar  4 14:32 node_modules
    -rw-r--r--    1 iusr0042 0               257 Mar  4 14:32 package.json
    drwxr-sr-x    2 iusr0042 0              8192 Mar  4 15:57 views
    $ ls -all views
    total 56
    drwxr-sr-x    2 iusr0042 0              8192 Mar  4 15:57 .
    drwxr-sr-x    4 iusr0042 0             12288 Mar  4 15:58 ..
    -rw-r--r--    1 iusr0042 0                50 Mar  4 14:37 index.jade
    $ ls -all node_modules
    total 112
    drwxr-sr-x    4 iusr0042 0              8192 Mar  4 14:32 .
    drwxr-sr-x    4 iusr0042 0             12288 Mar  4 15:58 ..
    drwxr-sr-x    2 iusr0042 0              8192 Mar  4 14:32 .bin
    drwxr-sr-x    5 iusr0042 0             28672 Mar  4 14:32 jade
    $ node app.js
    
    after navigation in the browser
    
    Error: Failed to lookup view "index" in views directory "/home/iusr0042/node-js/nodejs_expressjs/views"
        at EventEmitter.render (/home/iusr0042/node_modules/express/lib/application.js:579:17)
        at ServerResponse.render (/home/iusr0042/node_modules/express/lib/response.js:961:7)
        at /home/iusr0042/node-js/nodejs_expressjs/app.js:11:6
        at Layer.handle [as handle_request] (/home/iusr0042/node_modules/express/lib/router/layer.js:95:5)
        at next (/home/iusr0042/node_modules/express/lib/router/route.js:131:13)
        at Route.dispatch (/home/iusr0042/node_modules/express/lib/router/route.js:112:3)
        at Layer.handle [as handle_request] (/home/iusr0042/node_modules/express/lib/router/layer.js:95:5)
        at /home/iusr0042/node_modules/express/lib/router/index.js:277:22
        at Function.process_params (/home/iusr0042/node_modules/express/lib/router/index.js:330:12)
        at next (/home/iusr0042/node_modules/express/lib/router/index.js:271:10)
    
  5. Robert Brown reporter

    ``` #!app.js

    // ---app.js--- var express = require('express') var app = express()

    app.set('views', __dirname + '/views'); // console.log('views', __dirname + '/views'); app.set('view engine', __dirname + '/node_modules/jade'); // console.log('view engine', __dirname + '/node_modules/jade');

    app.get('/', function (req, res) { res.render('index', { title: 'Hey', message: 'Hello there!'}) })

    / app.get('/', function (req, res) { res.send('Hello World') }) /

    app.listen(80)```

  6. Robert Brown reporter
    // ---app.js---
    var express = require('express')
    var app = express()
    
    app.set('views', __dirname + '/views');
    // console.log('views',  __dirname + '/views');
    app.set('view engine', __dirname + '/node_modules/jade');
    // console.log('view engine',  __dirname + '/node_modules/jade');
    
    app.get('/', function (req, res) {
     res.render('index', { title: 'Hey', message: 'Hello there!'})
    })
    
     /* app.get('/', function (req, res) {
     res.send('Hello World')
    }) */
    
    
    app.listen(80)
    
  7. Aaron Bartell

    Hi Robert,

    Earlier in this thread we discussed the view engine line of code should not have a path in it. It should be the following:

    app.set('view engine', 'jade')
    

    Also, try using this line for the views location instead of the one you have:

    app.set('views', './views');
    
  8. Robert Brown reporter
    // ---app.js---
    var express = require('express')
    var app = express()
    
    app.set('views', __dirname + './views');
    // console.log('views',  __dirname + '/views');
    // app.set('view engine', __dirname + '/node_modules/jade');
    // console.log('view engine',  __dirname + '/node_modules/jade');
    
    app.set('view engine', 'jade');
    
    app.get('/', function (req, res) {
     res.render('index', { title: 'Hey', message: 'Hello there!'})
    })
    
     /* app.get('/', function (req, res) {
     res.send('Hello World')
    }) */
    
    
    app.listen(80)```
    

    #!runapp.js

    $ node app.js Error: Cannot find module 'jade' at Function.Module._resolveFilename (module.js:336:15) at Function.Module._load (module.js:278:25) at Module.require (module.js:365:17) at require (module.js:384:17) at new View (/home/iusr0042/node_modules/express/lib/view.js:78:30) at EventEmitter.render (/home/iusr0042/node_modules/express/lib/application.js:569:12) at ServerResponse.render (/home/iusr0042/node_modules/express/lib/response.js:961:7) at /home/iusr0042/node-js/nodejs_expressjs/app.js:13:6 at Layer.handle [as handle_request] (/home/iusr0042/node_modules/express/lib/router/layer.js:95:5) at next (/home/iusr0042/node_modules/express/lib/router/route.js:131:13)```

  9. Aaron Bartell

    Hi Robert,

    You left __dirname + in the views line. Review my previous post.

    Also, I don't see the express module in the node_modules/ directory. Install it using this command:

    $ cd /home/iusr0042/node-js/nodejs_expressjs
    $ npm install express
    

    If you still have issues then I'd recommend removing Jade and re-installing it:

    $ cd /home/iusr0042/node-js/nodejs_expressjs
    $ rm -rf node_modules/jade
    $ npm install jade
    
  10. Robert Brown reporter

    I think the missing express module did the trick. Now all is working as expected. Thanks again.

    Welcome to Secure Shell version 0.8.34.
    Answers to Frequently Asked Questions: http://goo.gl/TK7876
    Connecting to IUSR0042@V7R1DEV.IDEVCLOUD.COM...
    Loading NaCl plugin... done.
    IUSR0042@v7r1dev.idevcloud.com's password: 
    $ cd /home/iusr0042/node-js/nodejs_expressjs
    $ ls -all
    total 112
    drwxr-sr-x    4 iusr0042 0             12288 Mar  4 15:58 .
    drwxr-sr-x    3 iusr0042 0             12288 Mar  4 14:31 ..
    -rwxr-xr-x    1 iusr0042 0               511 Mar  8 10:53 app.js
    drwxr-sr-x    5 iusr0042 0              8192 Mar  8 11:01 node_modules
    -rw-r--r--    1 iusr0042 0               257 Mar  4 14:32 package.json
    drwxr-sr-x    2 iusr0042 0              8192 Mar  4 15:57 views
    $ ls -all node_modules
    total 136
    drwxr-sr-x    5 iusr0042 0              8192 Mar  8 11:01 .
    drwxr-sr-x    4 iusr0042 0             12288 Mar  4 15:58 ..
    drwxr-sr-x    2 iusr0042 0              8192 Mar  8 11:01 .bin
    drwxr-sr-x    4 iusr0042 0             12288 Mar  8 10:59 express
    drwxr-sr-x    5 iusr0042 0             28672 Mar  8 11:01 jade
    $ ls -all views
    total 56
    drwxr-sr-x    2 iusr0042 0              8192 Mar  4 15:57 .
    drwxr-sr-x    4 iusr0042 0             12288 Mar  4 15:58 ..
    -rw-r--r--    1 iusr0042 0                50 Mar  4 14:37 index.jade
    $ node app.js
    
    // ---app.js---
    var express = require('express')
    var app = express()
    
    app.set('views', './views');
    
    app.set('view engine', 'jade');
    
    app.get('/', function (req, res) {
     res.render('index', { title: 'Hey', message: 'Hello there!'})
    })
    
     /* app.get('/', function (req, res) {
     res.send('Hello World')
    }) */
    
    
    app.listen(80)
    

    Picture1.png

  11. Aaron Bartell

    Good deal! It's odd the program didn't bomb out sooner given the require('express') should have failed. Not sure why that happened but will keep that in mind for others that might have similar issues.

    I will mark this as resolved.

  12. Robert Brown reporter

    One additional comment. I was able to complete the rest of the code without issue in the article. It provided a great base to see how I can use node.js on IBM i.

  13. Aaron Bartell

    Excellent.

    If you are looking for more thorough training you can also check out the training course I will be using at the 2016 Spring tradeshows (WMCPA, NEUGC). Right now it combines most of the articles I've written into a single document and it will eventually go further. Right now it is meant to fill a 2.5hr timeslot at a conference.

    ##Click here if you are interested in taking the course (free). I welcome any and all feedback.

  14. Log in to comment