2017-01-28 4 views
2

Ich schreibe meine app.js einschließlich aller Routen in der Hauptdatei und alles hat gut funktioniert. Nach meinem Ziel war es, das Projekt klarer zu machen, indem ich die Routen in andere Dateien verschiebe, aber es funktioniert nicht. Ich übergebe ein Objekt statt einer Middleware-Funktion und ich weiß nicht, wie ich es richtig beheben soll.Nodejs Express: Routen in separaten Dateien

Das ist also meine app.js Datei:

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var morgan = require('morgan'); 
var mongoose = require('mongoose'); 
var myRoutes = require('./app/routes/myRoutes.js'); 

... 

//parser for getting info from POST and/or URL parameters 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 

//for log requests to console 
app.use(morgan('dev')); 

app.use('/myRoutes', myRoutes); 

app.get('/',function(req,res){ 
    res.end('Welcome Page!'); 
}); 

//Server Start 
app.listen(port); 
console.log('server start at port ' + port); 

Und die app/Routen/myRoutes.js enthält den folgenden Code:

var express = require('express'); 
... 
var myRoutes = express.Router(); 

myRoutes.get('/users',function(req,res){ 
... 
}); 

myRoutes.post('/setup',function(req,res){ 
    ... 
}); 

myRoutes.post('/remove', function(req,res){ 
    ... 
}); 

module.export = myRoutes; 

Ich habe auch versucht diese:

var express = require('express'); 
var myRoutes = express.Router(); 

myRoutes.route('/') 
    .get(function(req, res, next){ 
     res.end('myRoute Get'); 
    }) 
    .post(function(req, res, next){ 
     res.end('myRoute Post'); 
    }); 

module.export = myRoutes; 

Aber wieder scheint es keine Middleware-Funktion zu übergeben.

+0

versuchen 'var MyRoutes = require (‘ ./app/routes/myRoutes '); 'und prüfen, ob myRoutes null ist oder nicht –

+0

die Datei korrekt geladen ist. Die Probleme hängen mit der Übergabe einer Middleware-Funktion anstelle eines Objekts zusammen. – pittuzzo

+0

Was ist der Fehler? –

Antwort

2

Meine zweite Option Code

var express = require('express'); 
var myRoutes = express.Router(); 

myRoutes.route('/') 
    .get(function(req, res, next){ 
     res.end('myRoute Get'); 
    }) 
    .post(function(req, res, next){ 
     res.end('myRoute Post'); 
    }); 

module.export = myRoutes; 

funktioniert gut! Ich kann es nur in einer falschen Weise

module.export = myRoutes; 

isntead von

module.exports = myRoutes; 
0

schreiben Hallo dies eher zusätzliche Tipps zu der Frage ist. Sie müssen Js-Datei definitiv eine Menge von Routen laden, und ich fand, alle von ihnen zu importieren ist eine Menge Arbeit. verwenden eher require-dir Modul alle Routen zu laden wie

const loader = require('require-dir'); 
var app = express(); 
var routes = loader('./routes'); 
for (route in routes){ 
    app.use("/"+route,routes[route]); 
} 

unnötig zu sagen, alle Routen innerhalb routes Ordner definieren und exportieren Router Modul in jedem von ihnen wie

var router = express.Router(); 

router.get(....); 

module.exports = router;