You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:15:51