/fastify-lured

Preloads lua scripts with fastify-redis and lured.

Primary LanguageJavaScriptMIT LicenseMIT

fastify-lured

⚠️ This package is maintained until 2019-09-01 (end of the fastify@1.x lifecycle.) and won't be updated to fastify@2.x

js-standard-style Build Status Greenkeeper badge Known Vulnerabilities Coverage Status npm npm

Simple plugin to preload lua scripts via fastify-redis. Under the hood it scans the directory provided in path option and loads the files with lured.

Install

$ npm i --save fastify-lured

Usage

  1. Set up a redis server.
  2. Register fastify-redis first, then this plugin.

It provides scripts decorator object:

{
  [lowerCamelCaseFileNameWithoutExt]: {
    script: {String} The string representation of the script.
    sha: {String} Calculated sha of the script.
  }
}
const Fastify = require('fastify')
const fastifyRedis = require('fastify-redis')
const plugin = require('./index')
const nodeRedis = require('redis')
const { join } = require('path')

const { createClient } = nodeRedis
const instance = Fastify()
const client = createClient({ host: 'redis-test' })

instance
  .register(fastifyRedis, { client })
  .register(lured, { path: join(__dirname, 'test-scripts') })
  .get('/hello/:name', {}, (req, reply) => {
    let { redis, scripts } = instance

    redis.evalsha(scripts.hello.sha, 0, req.params.name, (err, result) => {
      reply
        // hello.lua script returns JSON which do not need seraialization.
        // Therefore we can bypass fastify internal serialization process.
        // For that we must set the content-type header.
        // See: https://www.fastify.io/docs/latest/Reply/#-serializer-func-
        .type('application/json; charset=utf-8')
        .serializer(function () {
          return result
        })
        .send(err || result)
    })
  })

Options

path {String} required It has to be an absolute path to the script directory.

Caveats

  • No recursive file loading.
  • Only loads files with .lua extension.
  • From v2.0.0 you need to pass node-redis client to fastify-redis, because it switched to ioredis as default client. Ioredis Commander class provides much better support for lua scripts, so using this plugin makes no sense.

License

Licensed under MIT.