@nestjs-kitchen/connextion-postgres
v1.0.1
Published
A flexible module to provide node-postgres interface in NextJS.
Downloads
115
Maintainers
Readme
@nestjs-kitchen/connextion-postgres
A flexible module to provide node-postgres interface in NextJS.
Install
$ npm install --save @nestjs-kitchen/connextion @nestjs-kitchen/connextion-postgres pg @types/pg
Usage
Apply PostgresModule
Export module, service & decorator.
export const { Postgres, PostgresModule, Transaction } = definePostgres(); export type Postgres = InstanceType<typeof Postgres>;
Register postgres connection instance with options.
@Module({ imports: [ // By default it will register a connection instance called `default`. PostgresModule.register({ // default's options... }) ], providers: [SampleService] }) export class SampleModule {}
Inject
Postgres
service.import { Postgres } from './file-that-exported-postgres'; @Injectable() class SampleService { constructor( private readonly postgres: Postgres, ) {} async sampleMethod() { const result1 = await this.postgres.default.query(`select 1=1;`); } }
Register multiple postgres instances
Define postgres connection instance names and export module, service & decorator.
e.g.:
instance_1
,instance_2
.export const { Postgres, PostgresModule, Transaction } = definePostgres<'instance_1' | 'instance_2'>(); export type Postgres = InstanceType<typeof Postgres>;
Register postgres connection instances with options.
@Module({ imports: [ PostgresModule.register({ connections: [ { name: 'instance1', // instance_1's options... }, { name: 'instance2', // instance_2's options... } ] }) ], providers: [SampleService] }) export class SampleModule {}
Inject
Postgres
service.import { Postgres } from './file-that-exported-postgres'; @Injectable() class SampleService { constructor( private readonly postgres: Postgres, ) {} async sampleMethod() { const result1 = await this.postgres.instance1.query(`select 1=1;`); } }
Using with node-postgres Query
import { Query } from 'pg';
import { Postgres } from './file-that-exported-postgres';
@Injectable()
class SampleService {
constructor(
private readonly postgres: Postgres
) {}
async sampleMethod() {
const query = new Query('select $1::text as name', ['brianc']);
const result = await this.postgres.default.query(query);
result.on('row', (row) => {
console.log('row!', row); // { name: 'brianc' }
})
}
}
Enable transaction
Apply transaction on all postgres connection instances:
import { Postgres, Transaction } from './file-that-exported-postgres';
@Injectable()
class SampleService {
constructor(
private readonly postgres: Postgres
) {}
// Supposes we have connection instances: `instance1` and `instance2`.
// By default it will enable transaction for both `instance1` and `instance2` if not specified.
@Transaction()
async sampleMethod() {
const result = await this.postgres.instance1.query(`select 1=1;`);
}
}
Apply transaction on specified postgres connection instances:
import { Postgres, Transaction } from './file-that-exported-postgres';
@Injectable()
class SampleService {
constructor(
private readonly postgres: Postgres
) {}
// Supposes we have connection instances: `instance1` and `instance2`.
// It will enable transaction for `instance1` as specified.
@Transaction(`instance1`)
async sampleMethod() {
const result = await this.postgres.instance1.query(`select 1=1;`);
}
}
License
MIT License