Node.js Awillix:TypeError:无法读取属性';电影服务';未定义的
我正在尝试使用Express.js和Awillix创建简单的应用程序以进行依赖项注入,但是我正在努力使用依赖项服务,因为它总是未定义的。 我得到的错误是: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
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}`)
})
})();