express-gems

0.1.1 • Public • Published

💎 express-gems

NPM

Encapsulated express related libraries for external utilities.

It's named "gems", but it has nothing to do with Ruby programming language, believe me. It is just a programmer trying to name things 🤷

Utility "gems" will keep expanding as I discover new needings with the libraries I am using.

⚙️ Setup

Via npm

You can install package by executing following command:

$ npm i express-gems -s

📦 Provided gems/goodies

✉️ MySQL Gem

.createPool(config, callback)

Creates traditional connection pool with given configs. However, callback is called with an err and pool object

Example:

const gemMySQL = require('express-gems').gemMySQL
 
let options = { /* ... */ }
 
gemMySQL.createPool(options, (err, pool) => {
    if (err) console.log('Error connecting to the DB.')
    // Tadaa! Connection established and pool is created successfully
})

.buildWhereTemplate(input, rules)

Helps you to build where templates.

const gemMySQL = require('express-gems').gemMySQL
 
let _pseudoReqBody = { foo:'Lorem ips', bar:'123.45', baz:'somevariable', unwanted:'malicious' }
 
let { where, params } = gemMySQL.buildWhereTemplate(_pseudoReqBody, {
    foo: { $clause:'=?', $prefix:'%', $postfix:'%' },
    bar: '=CAST(? AS UNSIGNED)',
    baz: '=?',
    locale: ['tr_TR', 'en_GB']
})
 
// "where" will be
///     "WHERE foo=? AND bar=CAST(? AS UNSIGNED) AND baz=? AND locale IN ('tr_TR', 'en_GB')"
// "params" will be
//     ['%Lorem ips%', '123.45', 'somevariable']

✉️ Express-validator Gem

.errors(req)

Returns a gathered up, response-ready format of errors within req. MUST BE used after express-validator middlewares are executed.

const express = require('express')
const gemValidator = require('express-gems').gemValidator
 
let app = express()
 
app.all('/some-endpoint', [ ... ], (req, res, next) => {
    const errors = gemValidator.errors(req)
    if (errors) return res.status(400).json({ errors })
})

errors is an object with checked fields in it. Error objects within the arrays are determined by the .withMessage(MSG) chain within the check rules.

{
    "checkedField1": [
        { "code":"SOME_ERROR_CODE", "arg1":"SOME_ARG" },
        { "code":"SOME_ERROR_CODE", "arg1":"SOME_ARG" },
    ],
    "checkedField2": [
        { "code":"SOME_ERROR_CODE", "arg1":"SOME_ARG" },
        { "code":"SOME_ERROR_CODE", "arg1":"SOME_ARG" },
    ],
    ...
}

.fillWithMessages(chains, errorTable?)

Traverses given chains array and fills them with appropriate error messages. (Helps you in cases you do not want to repeat same withMessage(MSG) statements)

const gemValidator = require('express-gems').gemValidator
const { check, body } = require('express-validator/check')
 
// With built-in standard messages
const validationRules = gemValidator.fillWithMessages([
    check('foo').exists().isInt({ min: 5 }),
    body('bar').optional().isLength({ max: 20 })
])
 
// With custom message builder table
const validationRules = gemValidator.fillWithMessages([
    check('foo').exists().isInt({ min: 5 }),
    body('bar').optional().isLength({ max: 20 })
], {
    isInt: (options) => ({ error: 'Should be an integer', someCustomField: 'Yea custom field' }),
    isLength: (options) => ({ error: 'Should be between', min: options[0].min, max: options[0].max })
})
 
// CAUTION: Please note that while using builder table
const validationRules = gemValidator.fillWithMessages([
    check('latlongfield').exists().isLatLong()
], {
    // isLatLong check is mapped into "_default"
    _default: (options) => ({ error: 'Should be a latlong value' })
})

‼️ Found a bug or have a suggestion?

Feel free to open up an issue to let me know if you;

  • Found a bug
  • Have a suggestion
  • Have a question

At: https://github.com/iGoodie/express-gems/issues

Package Sidebar

Install

npm i express-gems

Weekly Downloads

1

Version

0.1.1

License

MIT

Unpacked Size

13.8 kB

Total Files

7

Last publish

Collaborators

  • igoodie