从javascript承诺中提取函数(expressjs+;neDB)
以下代码正在运行并从我的neDB Promiss中检索所有用户: 我想做的是:优化这段代码,以避免将来重复使用CRUD函数,如下所示: 我想创建一个单独的模块,名为successFunctionCall/failureFunctionCall,但我需要在其中调用res,以设置响应JSON和状态代码。这是实现这一目标的更好方法吗 谢谢。您可以使用这些功能。将它们用作处理程序时,传递从javascript承诺中提取函数(expressjs+;neDB),javascript,express,promise,nedb,Javascript,Express,Promise,Nedb,以下代码正在运行并从我的neDB Promiss中检索所有用户: 我想做的是:优化这段代码,以避免将来重复使用CRUD函数,如下所示: 我想创建一个单独的模块,名为successFunctionCall/failureFunctionCall,但我需要在其中调用res,以设置响应JSON和状态代码。这是实现这一目标的更好方法吗 谢谢。您可以使用这些功能。将它们用作处理程序时,传递res,并获取一个新函数,该函数将等待内容或错误: const successFunctionCall = res =
res
,并获取一个新函数,该函数将等待内容或错误
:
const successFunctionCall = res => content =>
res.status(200).json(content);
const failureFunctionCall = res => err =>
res.status(400).json(err);
const getUsers = (res) => {
db.find({})
.sort({ name: 1 })
.exec()
.then(
successFunctionCall(res),
failureFunctionCall(res)
);
};
为了避免CRUD函数的重复,您的关注点可以以稍微不同的方式分开。下面是我的基本意思
constusersdb={}//这里是您的users数据库实例
const findAllSortedBy=db=>(…args)=>db.find({}).sort(…args).exec()
const findAllUsersSortedBy=findAllSortedBy(usersDb)
const success=res=>content=>res.status(200).json(content)
const failure=res=>err=>res.status(400).json(err)
const getUsers=res=>{
findAllUsersSortedBy({name:1})
.然后(成功)
.catch(失败(res))
}
下面是express route处理程序上下文中的getUsers
const getUsers=(请求、恢复)=>{
findAllUsersSortedBy({name:1})
.然后(成功)
.catch(失败(res))
}
router.get('/users',getUsers)
...
.then(successFunctionCall, failureFunctionCall)
...
const successFunctionCall = res => content =>
res.status(200).json(content);
const failureFunctionCall = res => err =>
res.status(400).json(err);
const getUsers = (res) => {
db.find({})
.sort({ name: 1 })
.exec()
.then(
successFunctionCall(res),
failureFunctionCall(res)
);
};