一个node.js高速路由和一个控制器有什么区别?

传统控制器在快速路线上有什么不同或更强大的function?

如果你有一个快速的应用程序和定义模型,它成为一个MVC应用程序,还是有更多的必要?

我只是想知道,如果我没有升级到更合理的“控制器”,我错过了我的节点快递应用程序中的额外/更简单的function。 如果有这样的事情。

谢谢!

编辑:澄清,如果你使用这样的路线:

// routes/index.js exports.module = function(req, res) { // Get info from models here, res.render('view', info: models); } 

与控制器有什么不同? 控制器能做更多吗?

首先,express中的路由是connect中定义的中间件。 Express和其他框架的区别在于,中间件大多位于控制器的前面,控制器结束响应。 为什么expression使用中间件的另一个原因是由于Node.js是asynchronous的。

让我们看看一个控制器可能看起来像在Javascript中。

 var Controller = function () { }; Controller.prototype.get = function (req, res) { find(req.param.id, function (product) { res.locals.product = product; find(res.session.user, function (user) { res.locals.user = user; res.render('product'); }); }); }; 

你可能注意到的第一件事就是嵌套的callback函数。 这是很难testing,难以阅读,如果你需要编辑的东西,你需要摆弄你的缩进。 所以我们通过使用stream量控制来解决这个问题,并使之平坦。

 var Controller = function () { }; Controller.prototype.update = function (req, res) { var stack = [ function (callback) { find(req.param.id, function (product) { res.locals.product = product; callback(); }); }, function (callback) { find(res.session.user, function (user) { res.locals.user = user; callback(); }); } ]; control_flow(stack, function (err, result) { res.render('product'); }); } 

在这个例子中,您可以提取堆栈的所有不同function,并对其进行testing,甚至可以将它们重新用于不同的路由。 您可能已经注意到,控制stream结构看起来很像中间件。 所以让我们用我们的路线中的中间件replace堆栈。

 app.get('/', function (req, res, next) { find(req.param.id, function (product) { res.locals.product = product; next(); }); }, function (req, res, next) { find(res.session.user, function (user) { res.locals.user = user; next(); }); }, function (req, res, next) { res.render('product'); } ); 

所以虽然在技术上可能在express.js中拥有控制器,但是您可能会被迫使用stream控制结构,最终与中间件相同。