0

I'm new to nodejs, below is my app.js I installed by express --sessions --css less --hogan app command.
I tried to separate the commented line in app.js move to a new file call route_handler.js.

I'm not sure am I doing correct I only add a require('./route_handler.js'); in app.js and should I have to export in route_handler.js but it is express() ?
How to solve it?

Does require means already execute the code in the file?

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', 'hjs');
// end: view engine setup


require('./route_handler.js');

// // uncomment after placing your favicon in /public
// //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
// app.use(logger('dev'));
// app.use(bodyParser.json());
// app.use(bodyParser.urlencoded({ extended: false }));
// app.use(cookieParser());
// app.use(require('less-middleware')(path.join(__dirname, 'public')));
// 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: {}
  });
});

module.exports = app;

route_handler.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 app = express();


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



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

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

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

// expore express() ??

1 Answer 1

3

Your problem is that the route_handler.js script creates new express instances in every use call, and non of them are connected to the app created in your app.js.

What you should probably do is something like:

route_handler.js

// !!!NOTE: no express = require !!!
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');



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

module.exports = setupRoutes;

and app.js

...
require('./route_handler.js')(app);
...
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.