Express Routes & Controllers
我知道Express并不是开箱即用的MVC框架,但是我试图将其设置为一个。
我在PHP中使用了其他类似的框架,例如Laravel,在其中的路由中,您可以使用类似
1 | Route::get('user/profile', 'UserController@showProfile'); |
它将运行UserController类中showProfile方法中的所有代码,
所以我的问题是,使用Express如何实现相同或相似的目的?
我正在使用节点5并在ECMAScript 6中编写代码。
目前,我有一个要用作控制器的类和一个要返回数据的方法,当用户导航到路由但还没有弄清楚如何发送数据时,我可以将数据记录到控制台 作为回应。
如果深入研究文档,您会发现所引用的"控制器方法"必须符合特定的签名。即,它们接收(至少)请求和响应表示。
如果您已经创建了路由器,那么这将与您发布的PHP大致相同:
1 | router.get('user/profile', userController.showProfile) |
您的showProfile"方法"需要具有以下签名:
1 2 3 | const userController = { showProfile(req, res) { /*...*/} } |
我将"方法"用引号引起来,因为除非您明确将其绑定到控制器对象,否则express不会将其称为方法。我们在这里将其作为未绑定函数传递。如果要使用它作为方法(以
但是现在,让我们坚持使用
出于说明目的,假设您可以通过调用
1 2 3 4 5 6 7 8 | const userController = { showProfile(req, res) { // We call some code to get what we want to send back const profile = userController.getProfile(req.userId) // We send it in the response as JSON res.send(profile) } } |
您问如何设置
?由于控制器通常是单例,因此通常不是必需的。您只需执行
您可以成功路由到
但是现在在
您也可以始终将路由器包装在一个对象中,以便您的控制器可以引用它(例如