从javascript承诺中提取函数(expressjs+;neDB)

从javascript承诺中提取函数(expressjs+;neDB),javascript,express,promise,nedb,Javascript,Express,Promise,Nedb,以下代码正在运行并从我的neDB Promiss中检索所有用户: 我想做的是:优化这段代码,以避免将来重复使用CRUD函数,如下所示: 我想创建一个单独的模块,名为successFunctionCall/failureFunctionCall,但我需要在其中调用res,以设置响应JSON和状态代码。这是实现这一目标的更好方法吗 谢谢。您可以使用这些功能。将它们用作处理程序时,传递res,并获取一个新函数,该函数将等待内容或错误: const successFunctionCall = res =

以下代码正在运行并从我的neDB Promiss中检索所有用户:

我想做的是:优化这段代码,以避免将来重复使用CRUD函数,如下所示:

我想创建一个单独的模块,名为successFunctionCall/failureFunctionCall,但我需要在其中调用res,以设置响应JSON和状态代码。这是实现这一目标的更好方法吗

谢谢。

您可以使用这些功能。将它们用作处理程序时,传递
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)
      );
};