节点JS应用程序更好的devise和分离

我用express创build了一个节点应用程序。 我尝试将下面的图层分开,这将使我能够使用unit testing来testing应用程序。

问题是,我不知道如何调用将在post / get / delete应用程序中停止的router.js文件。

server.js文件如下所示

http = require('http'), app = require('./app')(), http.createServer(app).listen(app.get('port'), function (err) { console.log('Express server listening on port ' + app.get('port')); }); 

这是app.js文件

 var express = require('express'), logger = require('morgan'), bodyParser = require('body-parser'), routesApp = require('./ro/route'); module.exports = function () { var app = express(); app.set('port', process.env.PORT || 3005); app.use(logger('dev')); app.use(function (req, res, next) { res.set('APP', 'User app'); next(); }); app.use(bodyParser.json()); app.use(routesApp); return app; }; 

这是router.js ,它会根据http的types,如post / delete / get等,将呼叫路由到其他模块。

 var handleGet = require('../controller/handleGet'); var handlePost = require('../controller/handlePost'); var express = require('express'); module.exports = function (app) { var appRoute = express.Router(); app.use(appRoute); appRoute.route('*') .post(function (req, res) { handlePost(req, res); }) .get(function (req, res) { handleGet(req, res) }) 

目前我有两个问题:

  1. 如何使它工作,因为当在debugging它转储在app.use(appRoute); 在router.js文件? 错误是TypeError:undefined不是一个函数

  2. 在我的文章中构build节点应用程序是否好方法? 我想分离像SOC这样的所有层,我对节点和expression都很陌生,我试图把它构build成模块化和可testing的。

  1. 如何使它工作,因为当在debugging它转储在app.use(appRoute); 在router.js文件? 错误是TypeError: undefined is not a function

这会失败,因为当你在app.js中 require时候,你requireapp传递给模块,你需要做类似的事情

 app.use(routesApp(app)); // <- this hurts my eyes :( 
  1. 是否像在我的文章中构build节点应用程序的好方法?我想要说明所有这些leers像SOC,我相当新的节点和expression,我试图build立它是模块化和可testing的… …

你一定要走在正确的轨道上,把事情分开是一个好主意。 testing无疑是最大的优势之一,但它也有助于维护和debugging等其他方面。

就个人而言,我将利用bin目录来启动任何脚本configuration

斌/ WWW

 var app = require('./app'); app.set('port', process.env.PORT || 3005); var server = app.listen(app.get('port'), function() { console.log('Express server listening on port ' + app.get('port')); }); 

这将有助于将您的快速应用程序从所有环境设置中解耦。 这应该保持你的app.js干净,只包含应用程序相关的configuration

app.js

 var express = require('express') , app = express() , logger = require('morgan') , bodyParser = require('body-parser') , routes = require('./routes.js'); app.use(logger('dev')); app.use(function (req, res, next) { res.set('APP', 'User app'); next(); }); app.use(bodyParser.json()); app.use('/', routes); ... module.exports = app; 

最后,你的routes.js只能处理你的URL

routes.js

 var express = require('express') , router = express.Router() , handleGet = require('../controller/handleGet') , handlePost = require('../controller/handlePost'); router.get('/', handleGet); router.post('/', handlePost); ... module.exports = router;