Preloads lua scripts with fastify-redis and lured.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
test-scripts
.gitignore
.travis.yml
LICENSE
README.md
example.js
index.js
package.json
test.js

README.md

fastify-lured

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.