I don't know how to use DataSource instead of createConnection

17 views Asked by At

CreateConnection and getConnectionOptions are deprecated as the typeorm version becomes 0.3.20. I know i have to use DataSource instead, but I can't modify it even if I look at the official document because i'm completely newbie. I do npm start after docker-compose up, it connects to Postgres, but I don't see the 'Memo' table.

/decorators/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);
  }
});

index.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

modules/memo/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;
}

I am trying to change it like the code below.

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);
  }
});

0

There are 0 answers