0.0.8 • Published 4 years ago

@skazka/server-mysql v0.0.8

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

Server MySQL

Skazka Server Promise based mysql client.

NPM

How to install

npm i @skazka/server @skazka/server-mysql config mysql2

With yarn:

yarn add @skazka/server @skazka/server-mysql config mysql2

Optionally you can add http server, error handler, logger, router, request and response:

npm i @skazka/server-http @skazka/server-router @skazka/server-error @skazka/server-logger @skazka/server-request @skazka/server-response
  

With yarn:

yarn add @skazka/server-http @skazka/server-router @skazka/server-error @skazka/server-logger @skazka/server-request @skazka/server-response

How to use

Config

config/default.json

{
  "mysql": {
    "host": "127.0.0.1",
    "port": 3306,
    "user": "user",
    "password": "password",
    "database": "database",
    "connectionLimit": 10
  }
}

Server module

const App = require('@skazka/server');
const Router = require('@skazka/server-router');

const mysql = require('@skazka/server-mysql');
        
const error = require('@skazka/server-error');
const logger = require('@skazka/server-logger');

const request = require('@skazka/server-request');
const response = require('@skazka/server-response');
        
const server = require('@skazka/server-http');
        
const app = new App();
const router = new Router();
        
app.all([
  error(),
  logger(),
  request(),
  mysql(),
  response(),
]);
    
app.then(async (ctx) => {
  // it works for each request
  const [rows] = await ctx.mysql.query('select * from users;');
});
    
router.get('/data').then(async (ctx) => {
  const [rows] = await ctx.mysql.query('select * from users;');
            
  return ctx.response(rows); 
});
        
app.then(router.resolve());
        
server.createHttpServer(app);

With connection:

app.then(async (ctx) => {
  const connection = await ctx.mysql.getConnection();
  const [rows] = await connection.query('select * from users;');
  await connection.release();
  
  return ctx.response(rows); 
});

Any other module

const pool = require('@skazka/server-mysql/pool');
    
async () => {
  try {
    const [rows] = await pool.query('select * from users;');
  } catch (error) {
    
  }
};

With connection:

const pool = require('@skazka/server-mysql/pool');
    
async () => {
  try {
    const connection = await pool.getConnection();
    const [rows] = await connection.query('select * from users;');
    await connection.release();
  } catch (error) {

  } finally {
    await connection.release();
  }
};

Transactions

const App = require('@skazka/server');
const app = new App();
const error = require('@skazka/server-error');
const logger = require('@skazka/server-logger');
const request = require('@skazka/server-request');
const response = require('@skazka/server-response');
    
const mysql = require('@skazka/server-mysql');
    
app.all([
  error(),
  logger(),
  request(),
  mysql(),
  response(),
]);
    
app.then(async (ctx) => {
  const connection = await ctx.mysql.getConnection();
  let rows = [];
        
  try {
    await connection.beginTransaction()
    [data] = await connection.query('select * from users;');
    rows = data;
    await connection.commit();
  } catch (e) {
    await connection.rollback();
  } finally {
    await connection.release();
  }
  
  return ctx.response(rows);
});

Or in any other module:

const pool = require('@skazka/server-mysql/pool');
    
async () => {
  const connection = await pool.getConnection();
    
  try {
   await connection.beginTransaction();
   await connection.query('select * from users;');
   await connection.commit();
  } catch (error) {
    await connection.rollback();
  } finally {
    await connection.release();
  }
};