typeorm-fastify-plugin
v3.0.0
Published
An updated fastify-typeorm-plugin for Fastify and Typeorm
Downloads
2,237
Maintainers
Readme
typeorm-fastify-plugin
A Fastify plugin that connects, organizes, and decorates all your database connections to your Fastify server. Uses TypeORM
Install
npm install typeorm-fastify-plugin
Usage
const Fastify = require('fastify');
const dbConn = require('typeorm-fastify-plugin');
const fastify = Fastify();
fastify
.register(dbConn, {
host: 'localhost',
port: 3306,
type: 'mysql',
database: 'your_database_name',
username: 'your_username',
password: 'your_database_password',
entities: [Users, Products]
})
.ready();
fastify.listen(3000, () => {
console.log('Listening on port 3000');
});
routes.js
const root = async (fastify, opts) => {
fastify.get('/', async function (request, reply) {
const userRepository = fastify.orm.getRepository(Users);
});
};
Fastify server will be decorated with orm
key and available everywhere in your app
You can also pass your connection as connection
Example
const fastify = require('fastify');
const dbConn = require('typeorm-fastify-plugin');
const { DataSource } = require('typeorm');
const connection = new DataSource({
host: 'localhost',
port: 3306,
type: 'mysql',
database: 'your_database_name',
username: 'your_username',
password: 'your_database_password'
});
fastify.register(dbConn, { connection: connection });
Note: You need to install the proper driver as a dependency. For example, if using MySQL, install mysql or mysql2.
With ES6
import Fastify from 'fastify';
import plugin from 'typeorm-fastify-plugin';
const fastify = Fastify();
fastify.register(plugin, {
/* your config options here */
});
Usage With Multiple Namespaces
Typorm allows you to use multiple DataSource
instances across your application globally. It only makes sense that this plugin would enable you to do the same thing. Using a namespace is easy but completely optional.
import Fastify from 'fastify';
import plugin from 'typeorm-fastify-plugin';
const fastify = Fastify();
fastify.register(plugin, {
namespace: 'postgres1',
host: 'localhost',
port: 5432,
username: 'test',
password: 'test',
database: 'test_db',
type: 'postgres'
});
This is the only way to initialize a "namespaced" instance using this plugin.
The namespace will be available everywhere your fastify server is. For example, to access the namespace declared in the above code: fastify.orm['postgres1'].getRepository()
This is the default behavior of wrapping code in fastify-plugin
module;
Logging
You can pass a custom logger or define one of the built-in loggers exposed through TypeORM logging options. If you do not declare a logger and enable Fastify logging, by default a PinoTypeOrm Logger will be used.
import Fastify from 'fastify';
import plugin from 'typeorm-fastify-plugin';
const fastify = Fastify();
fastify.register(plugin, {
namespace: 'postgres1',
host: 'localhost',
port: 5432,
username: 'test',
password: 'test',
database: 'test_db',
type: 'postgres',
logger: new YourCustomLoggerHere() || 'simple-console' || 'whatever'
});