因Mongoose.find()弃用回调,在app.get()中用异步匿名函数是否安全?
关于Express中异步路由处理函数的安全性问题
把Express路由的处理函数设为异步是完全安全的,Express原生就支持异步函数作为路由处理器,这也是当前Node.js后端开发里的常规写法。
不过你当前的代码存在冗余问题——await和.then()没必要同时使用,二选一即可,优化后的写法可以是下面两种:
写法一:纯async/await风格
app .route("/webclips") .get(async(req, res) => { const result = await Webclip.find({}); res.send(result); })
写法二:纯Promise链式调用风格
app .route("/webclips") .get((req, res) => { Webclip.find({}).then((result) => res.send(result)); })
另外需要注意:异步函数中如果抛出错误,Express不会自动捕获处理,可能导致请求挂起或者服务崩溃。所以建议加上错误处理逻辑,比如用try/catch包裹:
app .route("/webclips") .get(async(req, res) => { try { const result = await Webclip.find({}); res.send(result); } catch (err) { res.status(500).send({ error: err.message }); } })
你也可以配置Express的全局错误处理中间件,统一捕获所有路由的异步错误,避免每个路由都重复写try/catch。
内容的提问来源于stack exchange,提问作者vinshield
相关产品推荐
相关产品推荐

