Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/imedadel/fastify-autoroute
Next.js file routing for Fastify
https://github.com/imedadel/fastify-autoroute
fastify fastify-plugin nextjs router
Last synced: 1 day ago
JSON representation
Next.js file routing for Fastify
- Host: GitHub
- URL: https://github.com/imedadel/fastify-autoroute
- Owner: imedadel
- License: mit
- Created: 2020-09-04T17:33:52.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2020-09-05T00:07:13.000Z (over 4 years ago)
- Last Synced: 2024-12-17T20:47:32.673Z (6 days ago)
- Topics: fastify, fastify-plugin, nextjs, router
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/fastify-autoroute
- Size: 85 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Fastify AutoRoute
> Next.js file routing for Fastify.
If you're familiar with Next.js, you know how awesome the routing is. If not, have a look on their [documentation](https://nextjs.org/docs/routing/dynamic-routes) :)
AutoRoute gives you exactly the same routing (except for optional catch all routes, they can't be done in Fastify or they're inherently supported, _je sais pas_ π€·ββοΈ).
# Install
```shell
yarn add fastify-autoroute
# or
npm i fastify-autoroute
```# Usage
Add AutoRoute as a plugin to Fastify:
```ts
import { FastifyPlugin } from "fastify";
import { join } from "path";
import fastifyAutoRoute from "fastify-autoroute";const app: FastifyPlugin = function (fastify, opts, next): void {
fastify.register(fastifyAutoRoute, {
autoRouteDir: join(__dirname, "routes"),
});next();
};export default app;
```# Options
- **autoRouteDir** (required, string) β this is the root folder of your routes. This is similar to Next.js `/pages`.
# Structure
> I tried explaining this, but instead here is an example
For the following directory:
```
ββββroutes
β ββββusers
β β ββββ[id]
β β β ββββindex.get.ts
β β β ββββindex.delete.ts
β β β ββββname.get.ts
β β β ββββemail.get.ts
β β ββββindex.post.ts
β ββββteams
β β ββββ[...slug].get.ts
β ββββindex.get.ts
```You will get the following Fastify routes:
```
GET /
POST /users
GET /users/name
GET /users/email
GET /users/:id
DELETE /users/:id
GET /teams/*
```**Note.** the method `all` is expanded into all the methods supported by Fastify.
So, `name.all.ts` is expanded into```
GET /name
POST /name
PUT /name
...
```# File content
The default export is passed as a `handler` to `fastify.route()`. All other named exports are bassed as options to `fastify.route()` too.
```ts
export const schema = {};
export const onRequest = [];
export default async (request: FastifyRequest, reply: FastifyReply) => {
return { ok: true };
};
```## Accessing Fastify
In order to access Fastify and its decorators, you can use the following structure:
```ts
export default (fastify: FastifyInstance) => async (
request: FastifyRequest,
reply: FastifyReply
) => {
return {
config: fastify.config,
};
};
```The same structure applies when accessing Fastify from inside `onRequest`:
```ts
export const onRequest = [
(fastify) => async (request, reply) => {
// your content
return;
},
];
```Currently, accessing Fastify from inside other hooks is not supported.
# Unresolved issues
- **Typing:** Can't it be nicer? Like automatic typing for every exported function? Is that possible in Typescript?
- **More errors:** There should be more errors and checks for when users misuse this plugin.# Author
Imed Adel ([Twitter](https://twitter.com/imedadel_))
# License
MIT