File tree Expand file tree Collapse file tree 8 files changed +306
-0
lines changed Expand file tree Collapse file tree 8 files changed +306
-0
lines changed Original file line number Diff line number Diff line change 1+
2+ root = true
3+
4+ [* ]
5+ charset = utf-8
6+ end_of_line = lf
7+ insert_final_newline = true
8+ indent_style = space
9+ indent_size = 2
10+ trim_trailing_whitespace = true
11+
12+ # [*.md]
13+ # trim_trailing_whitespace = false
Original file line number Diff line number Diff line change 1+ # Logs
2+ logs
3+ * .log
4+ npm-debug.log *
5+
6+ # Runtime data
7+ pids
8+ * .pid
9+ * .seed
10+
11+ # Directory for instrumented libs generated by jscoverage/JSCover
12+ lib-cov
13+
14+ # Coverage directory used by tools like istanbul
15+ coverage
16+
17+ # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
18+ .grunt
19+
20+ # node-waf configuration
21+ .lock-wscript
22+
23+ # Compiled binary addons (http://nodejs.org/api/addons.html)
24+ build /Release
25+
26+ # Dependency directory
27+ node_modules
28+
29+ # Optional npm cache directory
30+ .npm
31+
32+ # Optional REPL history
33+ .node_repl_history
34+
35+ # 0x
36+ .__browserify_string_empty.js
37+ profile- *
38+
39+ # tap --cov
40+ .nyc_output /
41+
42+ # JetBrains IntelliJ IDEA
43+ .idea /
44+ * .iml
45+
46+ # VS Code
47+ .vscode /
Original file line number Diff line number Diff line change 1+ language : node_js
2+
3+ node_js :
4+ - " 9"
5+ - " 8"
6+ - " 6"
7+
8+ script :
9+ - npm run lint-ci
10+ - npm run test-ci
11+
12+ notifications :
13+ email :
14+ on_success : never
15+ on_failure : always
Original file line number Diff line number Diff line change 1+ # fastify-oracle
2+
3+ This module provides access to an Oracle database connection pool via the
4+ [ oracledb] ( https://npm.im/oracledb ) module. It decorates the [ Fastify] ( https://fastify.io )
5+ instance with an ` oracle ` property that is a connection pool instance.
6+
7+ When the Fastify server is shutdown, this plugin invokes the ` .close() ` on the
8+ connection pool.
9+
10+ ## Example
11+
12+ ``` js
13+ const fastify = require (' fastify' )()
14+
15+ fastify .register (require (' fastify-oracle' ), {
16+ pool: {
17+ user: ' foo' ,
18+ password: ' bar' ,
19+ connectString: ' oracle.example.com:1521/foobar'
20+ }
21+ })
22+
23+ fastify .get (' /db_data' , async function (req , reply ) {
24+ const conn = await this .oracle .getConnection ()
25+ const results = await conn .execute (' select 1 as foo from dual' )
26+ await conn .close ()
27+ return results
28+ })
29+ ```
30+
31+ ## Options
32+
33+ ` fastify-oracle ` requires an options object with at least one of the following
34+ properties:
35+
36+ + ` pool ` : an ` oracledb ` [ pool configuration object] ( https://github.com/oracle/node-oracledb/blob/33331413/doc/api.md#createpool )
37+ + ` poolAlias ` : the name of a pool alias that has already been configured. This
38+ takes precedence over the ` pool ` option.
39+ + ` client ` : an instance of an ` oracledb ` connection pool. This takes precedence
40+ over the ` pool ` and ` poolAlias ` options.
41+
42+ ## License
43+
44+ [ MIT License] ( http://jsumners.mit-license.org/ )
Original file line number Diff line number Diff line change 1+ {
2+ "name" : " fastify-oracle" ,
3+ "version" : " 1.0.0" ,
4+ "description" : " A plugin for Fastify to provide Oracle DB connections" ,
5+ "main" : " plugin.js" ,
6+ "scripts" : {
7+ "test" : " tap 'test/**/*.test.js'" ,
8+ "test-ci" : " tap --cov 'test/**/*.test.js'" ,
9+ "lint" : " standard | snazzy" ,
10+ "lint-ci" : " standard"
11+ },
12+ "precommit" : [
13+ " lint" ,
14+ " test"
15+ ],
16+ "repository" : {
17+ "type" : " git" ,
18+ "url" :
" git+ssh://[email protected] /jsumners/fastify-oracle.git" 19+ },
20+ "keywords" : [
21+ " fastify" ,
22+ " oracle"
23+ ],
24+ "author" :
" James Sumners <[email protected] >" ,
25+ "license" : " MIT" ,
26+ "bugs" : {
27+ "url" : " https://github.com/jsumners/fastify-oracle/issues"
28+ },
29+ "homepage" : " https://github.com/jsumners/fastify-oracle#readme" ,
30+ "devDependencies" : {
31+ "pre-commit" : " ^1.2.2" ,
32+ "snazzy" : " ^7.0.0" ,
33+ "standard" : " ^10.0.3" ,
34+ "tap" : " ^11.0.1"
35+ },
36+ "dependencies" : {
37+ "fastify-plugin" : " ^0.2.1" ,
38+ "oracledb" : " ^2.0.15"
39+ }
40+ }
Original file line number Diff line number Diff line change 1+ 'use strict'
2+
3+ const fp = require ( 'fastify-plugin' )
4+ const oracledb = require ( 'oracledb' )
5+
6+ function fastifyOracleDB ( fastify , options , next ) {
7+ const close = function ( fastify , done ) {
8+ fastify . oracle . close ( done )
9+ }
10+
11+ if ( options . client ) {
12+ if ( oracledb . Pool . prototype . isPrototypeOf ( options . client ) === false ) {
13+ return next ( Error ( 'supplied client must be an instance of oracledb.pool' ) )
14+ }
15+ fastify . decorate ( 'oracle' , options . client )
16+ fastify . addHook ( 'onClose' , close )
17+ return next ( )
18+ }
19+
20+ if ( options . poolAlias ) {
21+ const pool = oracledb . getPool ( options . poolAlias )
22+ if ( ! pool ) return next ( 'could not get default pool from oracledb instance' )
23+ fastify . decorate ( 'oracle' , pool )
24+ fastify . addHook ( 'onClose' , close )
25+ return next ( )
26+ }
27+
28+ if ( ! options . pool ) {
29+ return next ( Error ( 'must supply options.pool oracledb pool options' ) )
30+ }
31+
32+ oracledb . createPool ( options . pool , ( err , pool ) => {
33+ if ( err ) return next ( err )
34+ fastify . decorate ( 'oracle' , pool )
35+ fastify . addHook ( 'onClose' , close )
36+ next ( )
37+ } )
38+ }
39+
40+ module . exports = fp ( fastifyOracleDB , {
41+ fastify : '>=0.40.0' ,
42+ name : 'fastify-oracle'
43+ } )
Original file line number Diff line number Diff line change 1+ 'use strict'
2+
3+ const test = require ( 'tap' ) . test
4+ const oracledb = require ( 'oracledb' )
5+ const plugin = require ( '../plugin' )
6+
7+ test ( 'accepts singleton client' , ( t ) => {
8+ t . plan ( 4 )
9+ oracledb . createPool ( {
10+ user : 'SYSTEM' ,
11+ password : 'oracle' ,
12+ connectString : 'localhost/XE'
13+ } , ( err , pool ) => {
14+ if ( err ) t . threw ( err )
15+ const fastify = {
16+ decorate ( name , obj ) {
17+ t . is ( name , 'oracle' )
18+ t . is ( obj , pool )
19+ } ,
20+
21+ addHook ( name , fn ) {
22+ t . is ( name , 'onClose' )
23+ t . match ( fn , / f a s t i f y \. o r a c l e \. c l o s e / )
24+ }
25+ }
26+
27+ plugin ( fastify , { client : pool } , ( err ) => {
28+ if ( err ) t . threw ( err )
29+ pool . close ( )
30+ } )
31+ } )
32+ } )
33+
34+ test ( 'retrieves a cached pool' , ( t ) => {
35+ t . plan ( 4 )
36+ oracledb . createPool ( {
37+ user : 'SYSTEM' ,
38+ password : 'oracle' ,
39+ connectString : 'localhost/XE' ,
40+ poolAlias : 'foo'
41+ } , ( err , pool ) => {
42+ if ( err ) t . threw ( err )
43+ const fastify = {
44+ decorate ( name , obj ) {
45+ t . is ( name , 'oracle' )
46+ t . is ( obj , pool )
47+ } ,
48+
49+ addHook ( name , fn ) {
50+ t . is ( name , 'onClose' )
51+ t . match ( fn , / f a s t i f y \. o r a c l e \. c l o s e / )
52+ }
53+ }
54+
55+ plugin ( fastify , { poolAlias : 'foo' } , ( err ) => {
56+ if ( err ) t . threw ( err )
57+ pool . close ( )
58+ } )
59+ } )
60+ } )
Original file line number Diff line number Diff line change 1+ 'use strict'
2+
3+ // Unless someone can provide an Oracle Docker image to test against, we'll
4+ // just have to assume this works.
5+
6+ // const test = require('tap').test
7+ // const plugin = require('../plugin')
8+
9+ // test('creates usable pool from config', (t) => {
10+ // t.plan(6)
11+
12+ // const fastify = {
13+ // decorate (name, obj) {
14+ // t.is(name, 'oracle')
15+ // this[name] = obj
16+ // },
17+
18+ // addHook (name, fn) {
19+ // t.is(name, 'onClose')
20+ // t.match(fn, /fastify\.oracle\.close/)
21+ // }
22+ // }
23+
24+ // const opts = {
25+ // user: 'SYSTEM',
26+ // password: 'oracle',
27+ // connectString: 'localhost/xe'
28+ // }
29+ // plugin(fastify, {pool: opts}, (err) => {
30+ // if (err) t.threw(err)
31+ // t.ok(fastify.oracle)
32+ // fastify.oracle.getConnection()
33+ // .then((conn) => {
34+ // conn.execute('select 1 as foo from dual')
35+ // .then((rows) => {
36+ // t.is(rows.length, 1)
37+ // t.is(rows[0].foo, 1)
38+ // })
39+ // .then(() => conn.close())
40+ // .catch(t.threw)
41+ // })
42+ // .catch(t.threw)
43+ // })
44+ // })
You can’t perform that action at this time.
0 commit comments