elreeda
elreeda

Reputation: 4597

Cannot get in Express - NodeJS

I create an express project, but i install the module with command npm install, but when i run node app.js , i cant get foo, can anyone help me ?

the error:

Error: Failed to lookup view "error" in views directory "C:\Users\Jack\Desktop\demo\views"
   at EventEmitter.app.render (C:\Users\Jack\Desktop\demo\node_modules\express\lib\application.js:555:17)
   at ServerResponse.res.render (C:\Users\Jack\Desktop\demo\node_modules\express\lib\response.js:938:7)
   at C:\Users\Jack\Desktop\demo\app.js:55:7
   at Layer.handle_error (C:\Users\Jack\Desktop\demo\node_modules\express\lib\router\layer.js:58:5)
   at trim_prefix (C:\Users\Jack\Desktop\demo\node_modules\express\lib\router\index.js:300:13)
   at C:\Users\Jack\Desktop\demo\node_modules\express\lib\router\index.js:270:7
   at Function.proto.process_params (C:\Users\Jack\Desktop\demo\node_modules\express\lib\router\index.js:321:12)
   at IncomingMessage.next (C:\Users\Jack\Desktop\demo\node_modules\express\lib\router\index.js:261:10)
   at fn (C:\Users\Jack\Desktop\demo\node_modules\express\lib\response.js:933:25)
   at EventEmitter.app.render (C:\Users\Jack\Desktop\demo\node_modules\express\lib\application.js:557:14)

and the app.js :

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);



// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});

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

module.exports = app;

var port=3000;
var host='localhost';
app.listen(port, host);

console.log('Check url --> ' + host + ':' + port);

whaat's the problem here ? I install all module needed to run app.js but it's not work,plz help me, how can i fix this problem ?

Upvotes: 1

Views: 2197

Answers (2)

Alexis Paques
Alexis Paques

Reputation: 1975

For the 404 NOT FOUND :

Add thoses files in your views folder. It will allow you to have every errors.

And for your /foo route, I just saw the route is UNDER the 404 not found middleware! Which means it will NEVER go to the route. You should write all your routes in the files of the routes/ folder

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);

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

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});

module.exports = app;

var port=3000;
var host='localhost';
app.listen(port, host);

console.log('Check url --> ' + host + ':' + port);

Upvotes: 0

Alexis Paques
Alexis Paques

Reputation: 1975

There is a missing error view, the problem is not express, but the example you are running.

Create a file named error.ejs in your folder views.

error.ejs

<h1><%= message %></h1>
<h2><%= error.status %></h2>
<pre><%= error.stack %></pre>

But to get your application running with everything done, every files created and the folder architecture, you should use :

Upvotes: 1

Related Questions