我不知道如何使用DataSource而不是createConnection

问题描述 投票:0回答:1

随着 typeorm 版本变为 0.3.20,CreateConnection 和 getConnectionOptions 已被弃用。 我知道我必须使用 DataSource 来代替,但是即使我看官方文档我也无法修改它,因为我完全是新手。 我在

npm start
之后执行
docker-compose up
,它连接到 Postgres,但我没有看到“备忘录”表。

/装饰器/db.ts

import fp from "fastify-plugin";
import { createConnection, getConnectionOptions } from "typeorm";
import { Memo } from "../modules/memo/entity";

export default fp(async (fastify) => {
  try {
    const connectionOptions = await getConnectionOptions();
    const connection = await createConnection(connectionOptions);

    fastify.decorate("db", {
      memo: connection.getRepository(Memo),
    });
  } catch (error) {
    console.log(error);
  }
});

索引.ts

import fastify, {
  FastifyRequest,
  FastifyReply,
  FastifyInstance,
} from "fastify";
import { Server, IncomingMessage, ServerResponse } from "http";

import db from "./decorators/db";

const PORT = process.env.PORT || "3000";
const server: FastifyInstance<Server, IncomingMessage, ServerResponse> =
  fastify({ logger: true });

// test code
server.get("/", async (request: FastifyRequest, reply: FastifyReply) => {
  return { hello: "world" };
});

server.register(db);

server.listen(+PORT, "0.0.0.0", (err) => {
  if (err) throw err;
});

.env

TYPEORM_CONNECTION=postgres
TYPEORM_PORT=5432
TYPEORM_HOST=localhost
TYPEORM_USERNAME=admin
TYPEORM_PASSWORD=password123!
TYPEORM_DATABASE=test
TYPEORM_SYNCHRONIZE=true
TYPEORM_ENTITIES=src/modules/*/entity.ts

模块/备忘录/entity.ts

import {
  CreateDateColumn,
  Column,
  Entity,
  PrimaryGeneratedColumn,
  UpdateDateColumn,
} from "typeorm";

@Entity()
export class Memo {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: "varchar", length: 20, nullable: false })
  title: string;

  @Column({ type: "varchar", length: 1000, nullable: false })
  content: string;

  @CreateDateColumn()
  created_at: Date;

  @UpdateDateColumn()
  updated_at: Date;
}

我正在尝试像下面的代码那样更改它。

import fp from "fastify-plugin";
import { DataSource, DataSourceOptions } from "typeorm";
import { Memo } from "../modules/memo/entity";

export default fp(async (fastify) => {
  try {

    //maybe these codes..?
    const myDataSource = new DataSource({
       //...
    });

    fastify.decorate("db", {
      memo: myDataSource.getRepository(Memo),
    });
  } catch (error) {
    console.log(error);
  }
});

javascript datasource typeorm fastify
1个回答
0
投票

尝试安装Fastify typeorm插件:

npm i typeorm-fastify-plugin

然后您可以使用

fastify.orm
访问 typeorm。

更多信息:https://github.com/jclemens24/typeorm-fastify-plugin

或者,由于您使用的是 PostgreSQL,您也可以使用 Fastify 的官方

@fastify/postgres
包:

npm i pg @fastify/postgres

然后使用

connectionString
连接到您的数据库:

fastify.register(require('@fastify/postgres'), {
  connectionString: 'postgres://postgres@localhost/postgres'
})

您现在可以通过路线中的

fastify.pg.query()
执行查询。

更多信息:https://github.com/fastify/fastify-postgres

© www.soinside.com 2019 - 2024. All rights reserved.