• Stars
    star
    328
  • Rank 124,689 (Top 3 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created almost 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

MySQL plugin for egg

egg-mysql

NPM version Node.js CI Test coverage npm download

Aliyun rds client(support mysql portocal) for egg framework

Install

npm i egg-mysql --save

MySQL Plugin for egg, support egg application access to MySQL database.

This plugin based on ali-rds, if you want to know specific usage, you should refer to the document of ali-rds.

Configuration

Change ${app_root}/config/plugin.ts to enable MySQL plugin:

export default {
  mysql: {
    enable: true,
    package: 'egg-mysql',
  },
}

Configure database information in ${app_root}/config/config.default.ts:

Simple database instance

export default {
  mysql: {
    // database configuration
    client: {
      // host
      host: 'mysql.com',
      // port
      port: '3306',
      // username
      user: 'test_user',
      // password
      password: 'test_password',
      // database
      database: 'test',
    },
    // load into app, default is open
    app: true,
    // load into agent, default is close
    agent: false,
  },
}

Usage:

await app.mysql.query(sql, values); // you can access to simple database instance by using app.mysql.

Multiple database instance

export default {
  mysql: {
    clients: {
      // clientId, access the client instance by app.mysql.get('clientId')
      db1: {
        // host
        host: 'mysql.com',
        // port
        port: '3306',
        // username
        user: 'test_user',
        // password
        password: 'test_password',
        // database
        database: 'test',
      },
      // ...
    },
    // default configuration for all databases
    default: {

    },
    // load into app, default is open
    app: true,
    // load into agent, default is close
    agent: false,
  },
}

Usage:

const client1 = app.mysqls.get('db1');
await client1.query(sql, values);

const client2 = app.mysqls.get('db2');
await client2.query(sql, values);

CRUD user guide

Create

// insert
const result = await app.mysql.insert('posts', { title: 'Hello World' });
const insertSuccess = result.affectedRows === 1;

Read

// get
const post = await app.mysql.get('posts', { id: 12 });
// query
const results = await app.mysql.select('posts',{
  where: { status: 'draft' },
  orders: [['created_at','desc'], ['id','desc']],
  limit: 10,
  offset: 0
});

Update

// update by primary key ID, and refresh
const row = {
  id: 123,
  name: 'fengmk2',
  otherField: 'other field value',
  modifiedAt: app.mysql.literals.now, // `now()` on db server
};
const result = await app.mysql.update('posts', row);
const updateSuccess = result.affectedRows === 1;

Delete

const result = await app.mysql.delete('table-name', {
  name: 'fengmk2',
});

Transaction

Manual control

  • adventage: beginTransaction, commit or rollback can be completely under control by developer
  • disadventage: more handwritten code, Forgot catching error or cleanup will lead to serious bug.
const conn = await app.mysql.beginTransaction();

try {
  await conn.insert(table, row1);
  await conn.update(table, row2);
  await conn.commit();
} catch (err) {
  // error, rollback
  await conn.rollback(); // rollback call won't throw err
  throw err;
}

Automatic control: Transaction with scope

  • API:async beginTransactionScope(scope, ctx)
    • scope: A generatorFunction which will execute all sqls of this transaction.
    • ctx: The context object of current request, it will ensures that even in the case of a nested transaction, there is only one active transaction in a request at the same time.
  • adventage: easy to use, as if there is no transaction in your code.
  • disadvantage: all transation will be successful or failed, cannot control precisely
const result = await app.mysql.beginTransactionScope(async (conn) => {
  // don't commit or rollback by yourself
  await conn.insert(table, row1);
  await conn.update(table, row2);
  return { success: true };
}, ctx); // ctx is the context of current request, access by `this.ctx`.
// if error throw on scope, will auto rollback

Advance

Custom SQL splicing

const results = await app.mysql.query('update posts set hits = (hits + ?) where id = ?', [ 1, postId ]);

Literal

If you want to call literals or functions in mysql , you can use Literal.

Inner Literal

  • NOW(): The database system time, you can obtain by app.mysql.literals.now.
await app.mysql.insert(table, {
  create_time: app.mysql.literals.now,
});

// INSERT INTO `$table`(`create_time`) VALUES(NOW())

Custom literal

The following demo showed how to call CONCAT(s1, ...sn) funtion in mysql to do string splicing.

const Literal = app.mysql.literals.Literal;
const first = 'James';
const last = 'Bond';
await app.mysql.insert(table, {
  id: 123,
  fullname: new Literal(`CONCAT("${first}", "${last}"`),
});

// INSERT INTO `$table`(`id`, `fullname`) VALUES(123, CONCAT("James", "Bond"))

Questions & Suggestions

Please open an issue here.

License

MIT

Contributors


fengmk2


jtyjty99999


popomore


semantic-release-bot


atian25


dead-horse


AntiMoron


guoshencheng


Krryxa


cnwangjie


starandtina


shangwenhe

This project follows the git-contributor spec, auto updated at Mon Mar 06 2023 21:57:18 GMT+0800.

More Repositories

1

egg

🥚 Born to build better enterprise frameworks and apps with Node.js & Koa
JavaScript
18,650
star
2

examples

Store all egg examples in one place
JavaScript
1,748
star
3

awesome-egg

Awesome Egg.js Web Framework and Plugin.
869
star
4

egg-sequelize

Sequelize for Egg.js
JavaScript
609
star
5

egg-mongoose

JavaScript
437
star
6

egg-graphql

JavaScript
371
star
7

egg-ant-design-pro

showcase for Egg loves Ant Design
JavaScript
318
star
8

egg-redis

redis plugin for egg
JavaScript
267
star
9

egg-validate

validate plugin for egg
JavaScript
259
star
10

egg-security

Security plugin for egg, force performance too.
JavaScript
237
star
11

egg-socket.io

socket.io plugin for eggjs.
JavaScript
237
star
12

egg-cluster

cluster manager for egg
JavaScript
218
star
13

egg-core

A core Pluggable framework based on koa.
JavaScript
217
star
14

tegg

Strong Type framework with eggjs.
TypeScript
185
star
15

egg-bin

egg developer tool
TypeScript
183
star
16

egg-multipart

multipart plugin for egg
JavaScript
166
star
17

egg-ts-helper

🍳 Generate TypeScript definition files(d.ts) for Egg
TypeScript
157
star
18

egg-init

Init egg app helper tools
JavaScript
151
star
19

egg-view-vue

vue view plugin for egg
JavaScript
150
star
20

egg-cors

CORS plugin for egg
JavaScript
150
star
21

egg-logger

Egg logger
JavaScript
150
star
22

vscode-eggjs

vscode extension for https://eggjs.org/
TypeScript
145
star
23

egg-mock

Mock library for egg testing.
JavaScript
144
star
24

egg-router-plus

The missing router feature for eggjs
JavaScript
140
star
25

egg-scripts

deploy tool for egg projects
JavaScript
112
star
26

egg-rest

Restful API plugin for egg
JavaScript
107
star
27

egg-passport

passport plugin for egg
JavaScript
106
star
28

egg-view-react

egg view plugin for react
JavaScript
89
star
29

egg-view-nunjucks

nunjucks view plugin for egg
JavaScript
89
star
30

egg-static

static server plugin for egg
JavaScript
89
star
31

egg-schedule

Schedule plugin for egg
JavaScript
88
star
32

egg-oss

aliyun oss plugin for egg
JavaScript
87
star
33

egg-grpc

grpc plugin for egg
JavaScript
81
star
34

egg-sofa-rpc

SOFARPC plugin for egg
JavaScript
80
star
35

egg-userrole

user role plugin for egg
JavaScript
77
star
36

eslint-config-egg

Node Style Guide for Egg.
JavaScript
67
star
37

egg-view-ejs

egg view plugin for ejs.
JavaScript
64
star
38

egg-onerror

error handler for egg
Mustache
56
star
39

egg-alinode

alinode plugin for egg
JavaScript
54
star
40

egg-logrotator

Log rotate plugin for egg
JavaScript
53
star
41

egg-view-assets

Manage frontend assets in development and production.
JavaScript
52
star
42

egg-router

router for eggjs, fork from koa-router with some additional features
JavaScript
50
star
43

egg-orm

Object relational mapping for Egg framework
JavaScript
49
star
44

aliyun-egg

node web framework for aliyun, base on eggjs
JavaScript
49
star
45

egg-cancan

cancancan like authorization plugin for Egg.js
JavaScript
48
star
46

egg-session

session plugin for egg
JavaScript
47
star
47

egg-healthy

Liveness and Readiness health check for egg application
JavaScript
45
star
48

egg-passport-local

wrap passport-local strategy for egg-passport
JavaScript
45
star
49

egg-aop

AOP plugin for eggjs, add DI, AOP support.
TypeScript
44
star
50

egg-session-redis

redis store for egg session
JavaScript
43
star
51

egg-showcase-aliyun-blog

A blog showcase for aliyun-egg
JavaScript
42
star
52

egg-view

JavaScript
41
star
53

jar2proxy

transfer java facade jar to proxyjs
Java
41
star
54

egg-dubbo-rpc

dubbo rpc plugin for egg
JavaScript
40
star
55

egg-boilerplate-ts

Boilerplate for egg typescript project
TypeScript
40
star
56

egg-i18n

i18n plugin for egg
JavaScript
39
star
57

doctools

doctools for eggjs
JavaScript
38
star
58

egg-prometheus

Prometheus plugin for Egg.js
JavaScript
38
star
59

egg-http-proxy

http proxy for egg
JavaScript
38
star
60

egg-cloud

egg cloud provider tools for developers to quickly build some of the common patterns in distributed systems
JavaScript
38
star
61

egg-rpc-generator

RPC tools for egg framework
JavaScript
37
star
62

egg-errors

Errors for Egg.js.
TypeScript
31
star
63

egg-dingtalk

egg plugin for dingtalk
JavaScript
30
star
64

egg-cookies

cookies module for egg, base on pillarjs/cookies
JavaScript
30
star
65

egg-rpc

rpc plugin for eggjs
JavaScript
29
star
66

egg-tracer

tracer plugin for egg
JavaScript
29
star
67

create-egg

so you could use `npm init egg showcase` to init egg project
JavaScript
28
star
68

docker

Egg official docker image
JavaScript
27
star
69

egg-websocket

egg plugin for websocket
JavaScript
26
star
70

egg-path-matching

url path match/ignore support string, regexp and function
JavaScript
26
star
71

egg-lru

egg lru-cache plugin
JavaScript
25
star
72

egg-boilerplate-microservice

Boilerplate for egg microservice project
JavaScript
25
star
73

egg-watcher

Watcher plugin for egg
JavaScript
25
star
74

egg-parameters

Merge all parameters (ctx.params, ctx.request.query, ctx.request.body) into ctx.params like Rails application.
JavaScript
24
star
75

egg-development-proxyagent

[DEPRECATED] A proxy adapter for debugging httpclient on egg.
JavaScript
21
star
76

egg-userservice

userservice plugin for egg
JavaScript
21
star
77

egg-zookeeper

egg plugin for zookeeper
JavaScript
20
star
78

benchmark

benchmark for egg
JavaScript
20
star
79

egg-opentracing

Implementation of opentracing in Egg.js
JavaScript
19
star
80

egg-datahub

Macaca DataHub plugin for Egg.js
JavaScript
19
star
81

egg-ons

aliyun ons plugin for egg
JavaScript
18
star
82

egg-validate-schema

validate by json-schema plugin for egg
JavaScript
17
star
83

egg-development-proxyworker

**[DEPRECATED]** A proxy worker for debugging worker on egg
JavaScript
17
star
84

egg-boilerplate-simple

Boilerplate for egg simple project
JavaScript
16
star
85

eggjs.github.io

eggjs docs site
JavaScript
16
star
86

egg-logger-sls

Logger transport for aliyun sls.
JavaScript
15
star
87

egg-logview

Provide a log files viewer for development purpose.
JavaScript
15
star
88

egg-ci

Auto gen ci config file
JavaScript
15
star
89

egg-jsonp

jsonp support for egg, with security check inside
JavaScript
14
star
90

egg-boilerplate-plugin

Boilerplate for egg plugin
JavaScript
14
star
91

koa-express-adapter

The adapter for the migration from express to koa
JavaScript
14
star
92

egg-boilerplate-alipay-tiny

支付宝小程序服务端脚手架
JavaScript
14
star
93

egg-view-handlebars

egg view plugin for handlebars
JavaScript
12
star
94

egg-passport-github

github passport plugin for egg
JavaScript
11
star
95

egg-leancloud

leancloud plugin for Egg.js
JavaScript
11
star
96

egg-instrument

Compute the duration of an operation in local environment.
JavaScript
11
star
97

egg-utils

Utils for all egg projects.
TypeScript
11
star
98

egg-tslint-to-eslint

Migrate tslint-config-egg to eslint-config-egg in ts project.
JavaScript
9
star
99

egg-lookout

SOFALookout plugin for egg
JavaScript
9
star
100

egg-host

A host plugin for egg. It supports modify the host config, just like edit the /etc/hosts.
JavaScript
9
star