路由器:
router.get('/available', VehicleController.getAvailable)
router.put('/:vin/current-location', validate(vehicleValidation.currentLocation), VehicleController.saveCurrentLocation)
控制器
class VehicleController {
async getAvailable (req, res, next) {
try {
res.json(await VehicleQueries.getAvailable())
} catch (e) {
next(e)
}
}
async saveCurrentLocation (req, res, next) {
try {
res.json(await VehicleQueries.updateLocation(req.params.vin, req.body.lng, req.body.lat))
} catch (e) {
next(e)
}
}... etc etc
上面是一个简单的 CRUD 应用程序,在使用新的异步和等待功能的 Node.js 中构建。每个路由都会验证输入,然后传递到控制器中。上面的示例调用另一个类中包含查询语句的方法,这些方法会返回一个 Promise。
正如您所看到的,我必须在每个控制器的代码中包含 try 和 catch 代码块 ... 这变得相当烦人,我认为一定有更加简洁的方式。
是否可能以某种方式在控制器方法本身中包装 try catch?这样我就可以将控制器简化为:
class VehicleController {
async getAvailable (req, res, next) {
res.json(await VehicleQueries.getAvailable())
}
async saveCurrentLocation (req, res, next) {
res.json(await VehicleQueries.updateLocation(req.params.vin, req.body.lng, req.body.lat))
}... etc etc