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

Express+TypeScript报Cannot read property 'userService' of undefined如何解决

错误原因

当你直接将类的实例方法userCont.findAll作为回调传入Express的路由方法时,Express触发回调会改变this指向,导致findAll方法内部的this不再指向UserController的实例,而是undefined,所以读取this.userService时抛出了类型错误。同时你的异步路由没有捕获错误,所以附带抛出了未处理Promise拒绝的警告。

修复方案

你可以任选以下任一方式修复指向问题:

  • 方案1:绑定实例this到方法
    修改server文件里的路由注册代码:
app.get('/', userCont.findAll.bind(userCont))
  • 方案2:用箭头函数包裹路由调用
    修改server文件里的路由注册代码:
app.get('/', (req, res) => userCont.findAll(req, res))
  • 方案3:将Controller的方法定义为箭头函数
    修改UserController的findAll方法定义:
public findAll = async (req:Request, res:Response) => {
    const allUser = await this.userService.findAll()
    res.send(allUser)
}

额外优化建议

建议给异步路由添加try/catch捕获异常,避免再次出现未处理Promise拒绝的警告:

public async findAll(req:Request, res:Response){
    try {
        const allUser = await this.userService.findAll()
        res.send(allUser)
    } catch (err) {
        res.status(500).send({
            message: '查询用户失败',
            error: err
        })
    }
}

内容的提问来源于stack exchange,提问作者jenkem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:54:01