是什么使Node.js的快速通道和控制器之间的区别?(What is the difference

2019-08-01 13:54发布

有没有什么不同,或者更强大的超过特快航线传统的控制器?

如果你有一个明确的应用程序和定义模型,它成为一个MVC应用程序,或者是有更多的必要吗?

我只是想知道如果我不通过升级到一个更合理的“控制器”错过了额外的/更简单的功能在我的节点明确的应用程序。 如果有这样的事情。

谢谢!

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

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

是什么使得它从一个控制器有什么不同? 是控制器能够做更多?

Answer 1:

首先在快递所有的路线是在连接定义的中间件。 快车和其它框架之间的区别是,中间件大多位于在控制器的前部和控制器结束的响应。 为什么Express使用中间件的另一个原因是由于Node.js的是异步的,的性质。

让我们来看看控制器可能是什么样子的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');

    }); 

  }); 

};  

你可能会注意到这个我们采取行动的第一件事是嵌套的回调。 这是难以测试,难以阅读,如果你需要编辑的东西,你需要与你的缩进去拨弄。 所以让我们使用的流量控制解决这个问题,使之平整。

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');
  });

}

在这个例子中,你可以提取堆栈的所有不同的功能进行测试和验证,甚至重新使用它们不同的路线。 你可能已经注意到了,控制流结构看起来很像中间件。 所以让我们在我们的路线中间件更换堆栈。

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控制器,你可能会被强制使用流程控制结构,这到底是一样的中间件。



文章来源: What is the difference between a node.js express route and a controller?