2015-01-05 13 views
6

Sono novizio di Nodejs. Ho un app.js e un index.js all'interno della directory route. Ho un app.use(multer....). Ho anche definito app.post('filter-reports') che effettivamente carica il contenuto del file sul server.differenza tra app.js e index.js in Node.js

Ho la logica aziendale da eseguire e ho configurato i percorsi all'interno del file routes/index.js dove intendo configurare il percorso /filter-reports. Per favore aiutami a capire dove sto andando male. Ho bisogno di caricare il file utilizzando il multer anche eseguire la mia logica aziendale presente nel file index.js.

app.js codice sorgente:

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; 

Nel file index.js

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."); 
    // } 
}); 

La mia struttura del pacchetto è come qui di seguito:

app.js bin node_modules package.json public routes views 

mio package.json è

{ 
    "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" 
    } 
} 

Grazie in anticipo, Pradeep

+1

Qual è il problema esattamente? –

+0

La logica aziendale per elaborare la richiesta è presente nel mio index.js nella directory dei percorsi. Il file app.js ha il 'multer' per caricare il file. Quando utilizzo il file app.post all'interno del file app.js, il percorso all'interno di index.js non viene richiamato. Se rimuovo 'app.post' all'interno dell'app.js, il caricamento dei file non sta accadendo ma il percorso all'interno di index.js sta funzionando. Ho bisogno di caricare il file e di chiamare la funzione 'post' nel mio file' index.js'. – zilcuanu

risposta

5

Quando si passa una cartella al Nodo di require(), sarà verificare la presenza di un package.json per un endpoint. Se non è definito, controlla index.js e infine index.node (un formato di estensione C++). Quindi il index.js è probabilmente il punto di ingresso per richiedere un modulo.

È possibile controllare qui http://nodejs.org/api/modules.html#modules_folders_as_modules

Di solito io uso app.js per l'applicazione principale punto di accesso.

+2

Potresti spiegarci un po 'di più. Ho aggiornato la mia domanda con la struttura delle directory e il file package.json. – zilcuanu

0

Ho trovato la soluzione. Ho usato il router.use invece di app.use nel file index.js.