节点和打字稿:调用路由时未定义的属性



我决定创建一个没有任何ORM的项目,只使用mysql2包+node(打字稿(,但我很难在下面解决这个问题:

TypeError: Cannot read property 'userService' of undefined

当我尝试调用 get route/api/user 时,会出现此错误,但该服务正在我的控制器类上初始化。我只测试了查询,并按预期返回所有内容。

我的项目的主要结构将有一个用于数据库查询的存储库,一个用于业务逻辑的服务以及一个将管理我的路由的控制器

用户存储库

import pool from './../config/db';
interface IUser {
id: number,
login: string,
created_at: Date,
updated_at: Date
}
class User {
async getUsers (): Promise<Array<IUser>> {
try {
const [rows]: [Array<IUser>] = await pool.query('SELECT * FROM `clients`', []);
return rows;
} catch (err) {
return err;
}
}
}
export default User;

用户服务

import User from './../repository/user';
class UserService {
private user;
constructor () {
this.user = new User();
}
getUsers () {
return this.user.getUsers();
}
}
export default UserService;

用户控制器

import UserService from '../services/user.service';
import express from 'express';
class UserController {
public path = '/user';
public router = express.Router();
public userService;
constructor () {
this.userService = new UserService();
this.initializeRoutes();
}
private initializeRoutes (): void {
this.router.get(this.path, this.get);
}
get (req, res) {
res.send(this.userService.getUsers());
}
}
export default UserController;

在我的主文件中,我有这个将调用路由的方法:

private routes (): void {
const routes = [
new UserController()
];
routes.forEach((route) => {
this.app.use('/api', route.router);
});
}

在用户控制器中,get类方法函数由路由器调用。因此,您应该get函数绑定到类实例映射器,以便像这样this

constructor() {
this.userService = new UserService();
this.get = this.get.bind(this); // here you bind the function
this.initializeRoutes();
}

相关内容

  • 没有找到相关文章

最新更新