Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lependu/fastify-lured
Preloads lua scripts with fastify-redis and lured.
https://github.com/lependu/fastify-lured
fastify fastifyjs-plugin lua lured nodejs redis
Last synced: 11 days ago
JSON representation
Preloads lua scripts with fastify-redis and lured.
- Host: GitHub
- URL: https://github.com/lependu/fastify-lured
- Owner: lependu
- License: mit
- Created: 2017-12-23T17:55:52.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-06-24T14:03:53.000Z (over 1 year ago)
- Last Synced: 2024-09-15T14:48:29.767Z (about 2 months ago)
- Topics: fastify, fastifyjs-plugin, lua, lured, nodejs, redis
- Language: JavaScript
- Homepage:
- Size: 106 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-fastify - `fastify-lured` - redis](https://github.com/fastify/fastify-redis) and [lured](https://github.com/enobufs/lured). (<h2 align="center">Awesome Fastify</h2> / <h2 align="center">Ecosystem</h2>)
README
## fastify-lured
> :warning: This package is maintained until 2019-09-01 (end of the `[email protected]` lifecycle.) and won't be updated to `[email protected]`
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](http://standardjs.com/)
[![Build Status](https://travis-ci.org/lependu/fastify-lured.svg?branch=master)](https://travis-ci.org/lependu/fastify-lured)
[![Greenkeeper badge](https://badges.greenkeeper.io/lependu/fastify-lured.svg)](https://greenkeeper.io/)
[![Known Vulnerabilities](https://snyk.io/test/github/lependu/fastify-lured/badge.svg)](https://snyk.io/test/github/lependu/fastify-lured)
[![Coverage Status](https://coveralls.io/repos/github/lependu/fastify-lured/badge.svg?branch=master)](https://coveralls.io/github/lependu/fastify-lured?branch=master)
![npm](https://img.shields.io/npm/v/fastify-lured.svg)
![npm](https://img.shields.io/npm/dm/fastify-lured.svg)Simple plugin to preload lua scripts via [fastify-redis](https://github.com/fastify/fastify-redis). Under the hood it scans the directory provided in `path` option and loads the files with [lured](https://github.com/enobufs/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](https://www.fastify.io/docs/latest/Decorators/) object:
```
{
[lowerCamelCaseFileNameWithoutExt]: {
script: {String} The string representation of the script.
sha: {String} Calculated sha of the script.
}
}
``````js
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 } = instanceredis.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](./LICENSE).