如何委托快递中的路线处理?

How to delegate route processing in express?

我有 expressjs 应用程序,其 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;
});

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

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

那么您对上述方法有何看法,也许您知道更好的方法?

正如您在 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。一切由你决定——你只需要以某种方式将信息发送给客户端:)