Javascript 避免在express REST API中的控制器文件中重复使用函数
我有一堆控制器函数,它们的作用完全相同:在另一个同名文件中调用服务函数。为了举例说明,我将只提供两个函数,但假设有几个函数Javascript 避免在express REST API中的控制器文件中重复使用函数,javascript,node.js,rest,express,Javascript,Node.js,Rest,Express,我有一堆控制器函数,它们的作用完全相同:在另一个同名文件中调用服务函数。为了举例说明,我将只提供两个函数,但假设有几个函数 const express = require('express'); const router = express.Router(); const userService = require('./user.service'); const authorize = require('_helpers/authorize'); // routes router.post(
const express = require('express');
const router = express.Router();
const userService = require('./user.service');
const authorize = require('_helpers/authorize');
// routes
router.post('/authenticate', authenticate);
router.post('/create', create);
// ...
// ( it goes on like this )
// ...
module.exports = router;
function authenticate(req, res, next) {
userService.authenticate(req.body)
.then(user => user ? res.json(user) : res.status(400).json({ message: 'Error.' }))
.catch(err => next(err));
}
function create(req, res, next) {
userService.create(req.body)
.then(user => user ? res.json(user) : res.status(400).json({ message: 'Error.' }))
.catch(err => next(err));
}
// ...
// ( it goes on like this )
Javascript中有没有避免这种重复代码的方法?(我不是编程新手,但我是Javascript新手)。我在考虑用vim宏自动生成代码,但可能语言中有一些包或功能可以使代码看起来不那么冗长,可能是某种元编程。创建两个实用函数,如下所示
接受一个handleUser
对象并返回另一个接受res
的函数。这将允许您轻松地注入user
res
接受一个handleError
回调并返回另一个接受next
err
const handleUser = res => user =>
user ? res.json(user) : res.status(400).json({ message: 'Error.' });
const handleError = next => err => next(err);
const authenticate = (req, res, next) =>
userService.authenticate(req.body)
.then(handleUser(res)).catch(handleError(next));
const create = (req, res, next) => userService.create(req.body)
.then(handleUser(res)).catch(handleError(next));