difference between app.js and index.js in Node.js
Asked Answered
C

2

12

I am newbie to Nodejs. I have an app.js and an index.js inside the route directory. I have an app.use(multer....). I also have app.post('filter-reports') defined which actually uploads the file contents to the server.

I have business logic to be performed and have configured the routes inside the routes/index.js file where I intend to configure the /filter-reports route. Please help me understand where I am going wrong. I need to upload the file using the multer also run my business logic present in the index.js file.

app.js source code:

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var _ = require('underscore');
var cache = require('js-cache');
var multer  = require('multer');

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

var app = express();

app.all('*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
});


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

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);
var done=false;

app.use(multer({ dest: './uploads/',
rename: function (fieldname, filename) {
  return filename+Date.now();
},
onFileUploadStart: function (file) {
  console.log(file.originalname + ' is starting ...')
},
onFileUploadComplete: function (file) {
  console.log(file.fieldname + ' uploaded to  ' + file.path)
  done=true;
}
}));

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

app.post('filter-reports',function(req,res){
console.log('Working on the filtered reports....');
  if(done==true){
    console.log(req.files);
    res.end("File uploaded.");
  }
});

/// 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 express = require('express');
var request = require("request");
var _ = require('underscore');
var jscache = require('js-cache');
var schedule = require('node-schedule');
var filename;

In the index.js file

var router = express.Router();

router.post('/filter-reports', function(req, res) {
  console.log('Came inside the Node js router.. Now.. its all up to me to format the data....');
    // console.log(req.files);
    //  console.log('Came insode the filter-reports app url >>>>');
    // if(done==true){
    // console.log(req.files);
    // console.log('Files uploaded succesfully ....');
    //res.end("File uploaded.");
    //  }
});

My package structure is like below:

app.js  bin  node_modules  package.json  public  routes  views

My package.json is

{
  "name": "nodetest1",
  "version": "0.0.1",
  "private": true,
  "scripts": {
  "start": "node ./bin/www"
 },
  "dependencies": {
  "express": "~4.2.0",
  "static-favicon": "~1.0.0",
  "morgan": "~1.0.0",
  "cookie-parser": "~1.0.1",
  "body-parser": "~1.0.0",
  "debug": "~0.7.4",
  "multer": "~0.1.6",
  "jade": "~1.3.0"
  }
}

Thanks in advance, Pradeep

Conga answered 5/1, 2015 at 9:20 Comment(2)
What is the problem exactly?Hardpressed
The business logic to process the request is present in my index.js under the routes directory. The app.js file has the multer to upload the file. When I use the app.post inside the app.js file the route inside the index.js is not getting called. If I remove the app.post inside the app.js, the file uploading is not happening but the route inside the index.js is working. I need to upload the file as well as call the post function inside my index.js file.Conga
V
7

When you pass a folder to Node's require(), it will check for a package.json for an endpoint. If that isn't defined, it checks for index.js, and finally index.node (a C++ extension format). So the index.js is most likely the entry point for requiring a module.

You can check here http://nodejs.org/api/modules.html#modules_folders_as_modules

Usually I use app.js for the application main entry point.

Vahe answered 5/1, 2015 at 9:57 Comment(1)
Could you please explain a bit more. Have updated my question with the directory structure and package.json file.Conga
C
2

I found the solution. I used the router.use instead of app.use in in the index.js file.

Conga answered 6/1, 2015 at 4:5 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.