0

我有带有 straitfort 路由处理的 expressjs 应用程序,如下所示:

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

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

4

1 回答 1

1

正如您在Express Response 文档中所见- 响应 ( 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。一切由你决定——你只需要以某种方式向客户发送信息:)

于 2015-11-27T15:48:30.223 回答