【发布时间】:2020-11-10 17:34:17
【问题描述】:
我正在尝试使用 Express 和 CoreModel 将初始 Node 项目转换为 TypeScript 项目。
在我最初的项目中,架构如下示例:
处理用户
accountRouter
用户(类):根据用户需要包含特定的方法
CoreModel(父类):包含全局方法作为 CRUD
我已经尝试在 TypeScript 上保持这种方式,只做很少的修改
帐户路由器
import { Router } from 'express';
import { accountController } from '../controllers/accountController'
const router = Router()
const controller = new accountController()
router
.route('/account')
.get(controller.showUsers)
export default router
帐户控制器
import { Request, Response } from 'express'
import { User } from '../models/User'
import * as bcrypt from 'bcrypt'
import { UserInformations, UserInformationsEdit } from '../models/interface'
export class accountController {
private user: User = new User();
public async showUsers(req: Request, res: Response): Promise<Response> {
try {
console.log('this', this);
const result = await this.user.findAll()
return res.json(result)
} catch (error) {
throw new Error('error: ' + error.message)
}
}
}
用户
import { CoreModel } from './CoreModel'
export class User extends CoreModel {};
核心模型
import db from "../config/db"
export abstract class CoreModel {
name: any;
public async findAll(): Promise<any[]> {
try {
const result = await db.query(
`SELECT * FROM "${this.name.toLowerCase()}"`
);
return result.rows;
} catch (error) {
throw new Error('error: ' + error.message)
}
}
}
这样我可以转译我的代码,但是当我尝试访问 http://localhost:1234/account 我得到了
Cannot read property 'user' of undefined
在我看来,既然我在路由器中获得了一个 accountController 的实例,那么 this 应该是 accountController,不是吗?
在更广泛的层面上,我很确定我在 TS 中构建我的 API 的方式不是那么好,我试图在互联网上找到示例来重现概念,但我没有找到一些根据我的需要案例。
我很乐意从你那里得到一些意见来克服它
保罗
【问题讨论】:
标签: javascript node.js typescript api