node.js - 在 Express js 中引导后获取连接

标签 node.js typescript typeorm

我将 TypeORM 与expressjs一起使用,但在引导后无法连接。

在我的app.js中,我有

import 'reflect-metadata';
import { createConnection, ConnectionOptions } from 'typeorm';
// Other imports

const app: Application = express();

// Setup express-async-errors
asyncHandler;

createConnection({
  "type": "sqlite",
  "database": "database.sqlite",
  "synchronize": true,
  "logging": true,
  "entities": [
    path.join(__dirname, "app/entity/**/*.js")
  ],
}).then(async connection => {

  // Set Environment & middleware
  middleware(app);

  // setup routes
  routes(app);

  app.listen(3000);
}).catch(error => console.log(error));

 export default app;

然后,我有一个UsersController.ts,它链接到用户路由

import { Request, Response } from 'express';
import { User } from '../entity/User';
import { getConnection } from "typeorm";

class UsersController {
  private userRepository;

  constructor() {
    this.userRepository = getConnection().getRepository(User);
  }

  async index(req: Request, res: Response) {
    const users = await this.userRepository.find();

    res.json({
      users
    });
  }
}

export default UsersController;

但是,如果我尝试运行上面的代码,我总是会得到

ConnectionNotFoundError: Connection "default" was not found..

[ 'ConnectionNotFoundError: Connection "default" was not found.', ' at new ConnectionNotFoundError (C:[user]\node_modules\typeorm\error\ConnectionNotFoundError.js:19:28)', ' at ConnectionManager.get (C:[user]\node_modules\typeorm\connection\ConnectionManager.js:38:19)', ' at Object.getConnection (C:[user]\node_modules\typeorm\index.js:268:35)', ' at new UsersController (C:[user]\build\app\controllers\users.controller.js:7:41)', ' at Object. (C:[user]\build\app\routes\users.route.js:12:19)', ' at Module._compile (internal/modules/cjs/loader.js:689:30)', ' at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)', ' at Module.load (internal/modules/cjs/loader.js:599:32)', ' at tryModuleLoad (internal/modules/cjs/loader.js:538:12)', ' at Function.Module._load (internal/modules/cjs/loader.js:530:3)' ] }

我已经检查了 typeORM 在线文档,上面是设置 TypeORM 的推荐方法,所以我很困惑。

任何指向正确方向的指针都将受到赞赏。

最佳答案

发生错误的原因是初始化代码“TypeORM”异步运行,其余代码向前运行。解决方案是您需要在 then 之后的 block 中注册所有快速路由(createConnection ({}).then )。该文档有一个使用express的示例:

http://typeorm.io/#/example-with-express

关于node.js - 在 Express js 中引导后获取连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51663956/

相关文章:

javascript - 如何从 TypeORM 属性装饰器中获取值

javascript - 如何使用cheerio和nodejs在解析的HTML中查找特定的JavaScript代码?

javascript - 如何使用 Node 路径将 Windows 路径转换为 ​​posix 路径

javascript - Angular 9 测试组件依赖于可观察的服务 - 无法读取未定义的属性 'subscribe'

javascript - 如何防止用户在 Angular 8 中输入连续的 "00"?

sql - 使用 TypeORM 和 NestJS 原始查询返回插入的 id : await connection. manager.query(`INSERT INTO

Javascript 函数加载(通过引用?)

javascript - 无法在 node.js 中代理 PDF 文件

javascript - TypeScript 'number' 不可分配给 0 | 10 | 20 即使数字为 0

postgresql - 无法删除 TypeORM 中的 OneToMany 记录