随着 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);
}
});
尝试安装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()
执行查询。