Node路由报错:Type '(err: any) => void'与QueryOptions无共同属性
问题原因与解决方案
错误原因
你调用的BlogPostModel.findByIdAndDelete方法,在使用await时,第二个参数需要是QueryOptions类型的配置项(比如指定返回字段、会话等),而非回调函数。你传入的err => {}属于回调类型,和QueryOptions完全不兼容,因此触发了类型错误。另外代码里还有个小问题:res.status(400).send.send('Error deleting post')多写了一个.send,正确写法是res.status(400).send(...)。
正确的错误处理方式
因为你已经用了async函数,推荐用try/catch配合await的写法,代码更简洁易读:
public async deletePost(req: Request, res: Response) { const { id } = req.params; try { const deletedPost = await BlogPostModel.findByIdAndDelete(id); // 处理帖子不存在的情况 if (!deletedPost) { return res.status(404).send('Post not found'); } res.status(200).send(deletedPost); } catch (err) { // 处理数据库操作错误 res.status(400).send('Error deleting post'); } }
若坚持使用回调写法
如果不想用async/await,可以去掉await,直接传入回调(此时第二个参数支持回调函数):
public deletePost(req: Request, res: Response) { const { id } = req.params; BlogPostModel.findByIdAndDelete(id, (err, deletedPost) => { if (err) { return res.status(400).send('Error deleting post'); } if (!deletedPost) { return res.status(404).send('Post not found'); } res.status(200).send(deletedPost); }); }
内容的提问来源于stack exchange,提问作者David Reke
相关产品推荐
相关产品推荐

