如何实施D.R.Y. Express异步路由上的模块?

问题描述 投票:0回答:1

我一直在研究如何删除路线中的重复代码,而我的大多数路线如下所示:

router.get('/', async (req, res) => {
  try {
    // code
  } catch (err) {
    console.error(err.message)
    res.status(500).send('Server Error')
  }
})

或带有中间件:

router.post('/:id', [foo, bar], async (req, res) => {
  try {
    // code
  } catch (err) {
    console.error(err.message)
    res.status(500).send('Server Error')
  }
})

我的目标是创建一个模块来删除带有错误处理的重复try / catch。我已经尝试过:

tryCatch.js

module.exports = (passed) => {
  return async (req, res) => {
    try {
      await passed()
    } catch (err) {
      console.error(err.message)
      res.status(500).send('Server Error')
    }
  }
}

但是当我尝试实现它时,我遇到了问题:

router.get('/', auth, tryCatch({
  const posts = Post.find().sort({ date: -1 })

  res.json(posts)
})

研究:

但是我找不到这是否可行。我可以在Express中创建一个对D.R.Y.有帮助的模块我的路线中的代码?

node.js express routes dry
1个回答
0
投票

[tryCatch()需要将所需的请求数据传递给端点函数。

module.exports = (passed) => {
  return async (req, res) => {
    try {
      await passed(req,res)
    } catch (err) {
      console.error(err.message)
      res.status(500).send('Server Error')
    }
  }
}

[tryCatch()期望异步功能或承诺。。

router.get('/', auth, tryCatch(async (req,res)=>{
  const posts = Post.find().sort({ date: -1 })

  res.json(posts)
}))
© www.soinside.com 2019 - 2024. All rights reserved.