如何在快递中委托路由处理?

时间:2015-11-27 15:30:36

标签: node.js express controller routes express-4

我已经通过以下方式表达了与straitfort路径处理的应用程序:

app.route('/').get(function(req, res, next) {
   // handling code;
});

app.route('/account').get(function(req, res, next) {
   // handling code;    
});

app.route('/profile').get(function(req, res, next) {
   // handling code;
});

现在我将所有代码放在路由处理程序中,但我想尝试将其委​​托给某些类,如下所示。

app.route('/').get(function(req, res, next) {
   new IndexPageController().get(req, res, next);
});

app.route('/account').get(function(req, res, next) {
   new AccountPageController().get(req, res, next);
});

app.route('/profile').get(function(req, res, next) {
   new ProfilePageController().get(req, res, next);
});

那么你对上面的方法有什么看法呢?你知道更好吗?

1 个答案:

答案 0 :(得分:1)

正如您在Express Response documentation中看到的那样 - 响应(req)可以通过几种方法向客户端发送信息。最简单的方法是使用req.render,如:

// send the rendered view to the client
res.render('index');

知道这意味着你可以在另一个函数中做任何你想做的事情,最后只需调用res.render(或任何其他向客户端发送信息的方法)。例如:

app.route('/').get(function(req, res, next) {
   ndexPageController().get(req, res, next);
});

// in your IndexPageController:

function IndexPageController() {
    function get(req, res, next) {
        doSomeDatabaseCall(function(results) {
            res.render('page', results);
        }
    }

    return {
        get: get
    }
}
// actually instantiate it here and so module.exports
// will be equal to { get: get } with a reference to the real get method
// this way each time you require('IndexPageController') you won't
// create new instance, but rather user the already created one
// and just call a method on it.
module.exports = new IndexPageController();

对此没有严格的处理方法。您可以传递响应,其他人可以调用渲染。或者你可以等待另一件事(比如db调用),然后调用render。一切都取决于你 - 你只需要以某种方式向客户发送信息:)