hackycy / egg-typeorm

🔥 TypeORM plugin for Egg.js
MIT License
13 stars 5 forks source link

this.ctx 上并没有repo(运行时) #7

Closed lushiyi61 closed 3 years ago

lushiyi61 commented 3 years ago

declare module 'egg' { interface Context { entity: { AdminInfo: typeof EntityAdminInfo } repo: { AdminInfo: Repository } } }

这是自动生成的,代码在VS code中,没有任何错误,正常启动后,连接数据库正常。但是在service中,this.ctx 上没有 repo

lushiyi61 commented 3 years ago

我目前的解决方案

    // const adminInfo: IAdminInfo = await this.ctx.repo.AdminInfo.findOne({ account });
    const adminInfo = await getRepository(AdminInfo).findOne({ account });
hackycy commented 3 years ago

@lushiyi61 稍等我测试一下

hackycy commented 3 years ago

@lushiyi61 有复现的Demo吗?我这边运行测试没有问题呀

lushiyi61 commented 3 years ago

我昨天才立项的,整了半天。 我的代码在这,github经常连不上。https://gitee.com/iwof/admin_server.git 目前我的代码是正常可运行的,只是this.ctx 上没有repo,你看看

hackycy commented 3 years ago

@lushiyi61 你的项目我无法正常运行,但是我修改了一些问题就没问题了。

注意修改的地方: 该插件定义的实体类模型文件夹下不要再放置interface,你可以放置去别的地方。你配置了该文件夹就全部只存放实体类。 image

你可以参考以下项目:

lushiyi61 commented 3 years ago

谢谢 帮忙哈

发送自 Windows 10 版邮件https://go.microsoft.com/fwlink/?LinkId=550986应用

发件人: @.> 发送时间: 2021年7月21日 11:01 收件人: @.> 抄送: @.>; @.> 主题: Re: [hackycy/egg-typeorm] this.ctx 上并没有repo(运行时) (#7)

@lushiyi61https://github.com/lushiyi61 你的项目我无法正常运行,但是我修改了一些问题就没问题了。

注意修改的地方: 该插件定义的实体类模型文件夹下不要再放置interface,你可以放置去别的地方。你配置了该文件夹就全部只存放实体类。 [image]https://user-images.githubusercontent.com/26972260/126423715-02635b58-c194-484b-8dae-1f7c4fca751b.png

你可以参考以下项目:

― You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/hackycy/egg-typeorm/issues/7#issuecomment-883848166, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AGLQL34ALEPWSRR2AZU5VL3TYY2B7ANCNFSM5AW74A2Q.

lushiyi61 commented 3 years ago

啊,你无法正常运行。真是奇怪了。现在按照你的方式,我这依然报错, 打印输出 this.ctx.repo = {}

/api/login/account] nodejs.TypeError: Cannot read property 'findOne' of undefined

代码如下 const adminInfo: IAdminInfo = await this.ctx.repo.AdminInfo.findOne({ account }); // const repository = getRepository(AdminInfo); // const adminInfo = await repository.findOne({ account });

hackycy commented 3 years ago

@lushiyi61 建议你发一个最小的复现Demo给我吧,你那个我也无法正常运行。

hackycy commented 3 years ago

@lushiyi61 这是我还原可运行的,你自己测试一下吧 admin_server-master.zip

hackycy commented 3 years ago

@lushiyi61 还有一点: 你定义的实体类必须要以default导出,否则无法识别。

import { Entity, Column, PrimaryColumn } from 'typeorm';
import { BaseEntity } from './BaseEntity';

// default 导出
@Entity({ name: 'AdminInfo' })
export default class AdminInfo extends BaseEntity {
  @PrimaryColumn()
  account: string;

  @Column()
  password: string;

  @Column()
  name: string;

  @Column()
  power: string;

  @Column()
  ip: string;
}
hackycy commented 3 years ago

@lushiyi61 没问题我关了哈。

lushiyi61 commented 3 years ago

我用了你给我的文件,安装,然后修改数据库配置,仅此而已。但问题依旧。真是让人头疼。难道跟node版本有关? 我的node是 v14.16.1. 我还发现,我启用了redis,也正常连接上redis了,但是this.app上也没有,真是令人头大

hackycy commented 3 years ago

你只要看你定义的entity有没有export default导出就可以了

hackycy commented 3 years ago

@lushiyi61 image

image

demo运行无误,我的Node版本是v14.16.0。确保entity是export default导出。