我一直在研究如何删除路线中的重复代码,而我的大多数路线如下所示:
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.有帮助的模块我的路线中的代码?
[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)
}))