如何模块化Node.JS W / Express

我试图模块化我的node.js应用程序(使用快速框架)。 我遇到的麻烦是设置我的路线。

我不再能够提取我发送给该post的数据。 (req.body是未定义的)。 如果它全部在同一个文件中,这工作正常。 我在这里做错了什么,在node.js中模块化代码的最佳方式是什么?

我的app.js

require('./routes.js').setRoutes(app); 

我的route.js

 exports.setRoutes = function(app){ app.post('/ask', function(req, res, next){ time = new Date(); var newQuestion = {title: req.body.title, time: time.getTime(), vote:1}; app.questions.push(newQuestion); res.render('index', { locals: { title: 'Questions', questions: app.questions } }); }); 

更好的方法:

创build一个routes.js文件,其中包含:

 var index = require('./controllers/index'); module.exports = function(app) { app.all('/', index.index); } 

然后,从你的server.js(或者你已经开始你的服务器),你会需要它:

 require('./routes')(app); 

这样你就不会创build全局variables,带来一系列的问题(可testing性,碰撞等)

我意识到有人已经回答,但是这里是我所做的。

app.js:

 fs.readdir('./routes', function(err, files){ files.forEach(function(fn) { if(!/\.js$/.test(fn)) return; require('./routes/' + fn)(app); }); }); 

./routes/index.js:

 module.exports = function(app) { var data_dir = app.get('data-dir'); app.get('/', function(req, res){ res.render('index', {title: 'yay title'} }); } 

也许有人会发现这种方法有帮助。

我的问题是,我是以错误的方式宣布的应用程序。 而不是var app = module.exports = express.createServer(); ,它应该只是app = express.createServer();

然后,我需要在我的app.js做require('./routes.js'); 。 现在path文件可以访问应用程序variables,现在我可以在路由文件中正常声明路由。

(routes.js)

 app.get('/test', function(req, res){ console.log("Testing getter"); res.writeHead('200'); res.end("Hello World"); }); 

全球“应用程序”为我(通常)。 如果你知道该应用程序不会是require()d,并且如果你不笨拙,那么使用起来要容易得多

例如在app.js中

 var users = require('./lib/users'); //this is your own module app.use(users); 

然后,你在你的lib / users文件夹中创build文件(index.js,user.ejs等)。 使用index.js默认模块加载//index.js var express = require('express'); var app = module.exports = express();

 app.set('views',__dirname); app.set('view engine','ejs'); app.get('/users',function(req,res){ //do stuffs here }); 

我在这里做了一个Modular node.jes + Boostrap的例子: Nodemonkey或者这里的导师