Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Awillix:TypeError:无法读取属性';电影服务';未定义的_Node.js_Typescript_Express_Dependency Injection - Fatal编程技术网

Node.js Awillix:TypeError:无法读取属性';电影服务';未定义的

Node.js Awillix:TypeError:无法读取属性';电影服务';未定义的,node.js,typescript,express,dependency-injection,Node.js,Typescript,Express,Dependency Injection,我正在尝试使用Express.js和Awillix创建简单的应用程序以进行依赖项注入,但是我正在努力使用依赖项服务,因为它总是未定义的。 我得到的错误是: TypeError: Cannot read property 'movieService' of undefined at MovieController.findById (/home/mat/Projects/movies-ts/src/movie-controller.ts:17:26) at Layer.handle

我正在尝试使用Express.js和Awillix创建简单的应用程序以进行依赖项注入,但是我正在努力使用依赖项服务,因为它总是未定义的。 我得到的错误是:

TypeError: Cannot read property 'movieService' of undefined
    at MovieController.findById (/home/mat/Projects/movies-ts/src/movie-controller.ts:17:26)
    at Layer.handle [as handle_request] (/home/mat/Projects/movies-ts/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/mat/Projects/movies-ts/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/home/mat/Projects/movies-ts/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/home/mat/Projects/movies-ts/node_modules/express/lib/router/layer.js:95:5)
    at /home/mat/Projects/movies-ts/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/home/mat/Projects/movies-ts/node_modules/express/lib/router/index.js:335:12)
    at next (/home/mat/Projects/movies-ts/node_modules/express/lib/router/index.js:275:10)
    at Function.handle (/home/mat/Projects/movies-ts/node_modules/express/lib/router/index.js:174:3)
    at router (/home/mat/Projects/movies-ts/node_modules/express/lib/router/index.js:47:12)
MovieController是一个使用MovieService依赖项的类。MovieService什么也不做,它只是返回一些字符串来测试注入。看起来是这样的:

enum Routes {
    FindById = '/'
}

(async () => {
    const container: AwilixContainer = await createContainer();
    const app = express();

    const movieController = container.resolve('movieController') as MovieController;

    const router = express.Router();
    router.get(Routes.FindById, movieController.findById);
    app.use(router);

    app.listen(3000, () => {
        console.log(`Listening in port ${3000}`)
    })
    
})();
电影服务:

export default class MovieService {

    constructor() { }

    findById(id: number): string {
        return `Found user with id ${id}`;
    }
}
export default class MovieController {
    movieService: MovieService;

    constructor(movieService: MovieService) { 
        this.movieService = movieService;
    }

    findById(req: Request, res: Response) {
        const msg = this.movieService.findById(1234); <- This gives undefined
        return msg;
    }
}
MovieController(保留MovieService的依赖项):

我错过了什么

enum Routes {
    FindById = '/'
}

(async () => {
    const container: AwilixContainer = await createContainer();
    const app = express();

    const movieController = container.resolve('movieController') as MovieController;

    const router = express.Router();
    router.get(Routes.FindById, movieController.findById);
    app.use(router);

    app.listen(3000, () => {
        console.log(`Listening in port ${3000}`)
    })
    
})();