lependu / fastify-lured

Preloads lua scripts with fastify-redis and lured.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.

About

Preloads lua scripts with fastify-redis and lured.

License:MIT License


Languages

Language:JavaScript 98.8%Language:Lua 1.2%