elysia-file-router
TypeScript icon, indicating that this package has built-in type declarations

0.0.1-beta.2 • Public • Published

elysia-file-router

A (very) simple file based router for Elysia with TSX support

Installing

To install this package run the following command:

bun add elysia-file-router

Usage and configuration

import { Elysia } from 'elysia'
import { fileRouter } from 'elysia-file-router'

new Elysia()
    .use(fileRouter('./routes'))
    .listen(3000, () => console.log('Listening on port 3000'))

It's as simple as adding the fileRouter method as a middleware call! fileRouter takes in a string directory path where the routes are (defaults to "./routes")

Routing

Using the following folder structure as an example:

- root/
  - routes/
    - _layout.tsx
    - _error.tsx
    - +index.tsx
    - blog
      - +all.tsx
      - [id]/+index.tsx
    - user/
      - */
        - +index.tsx

You get the following routes and files:

  • /: ./routes/index.tsx
  • /blog/all: ./routes/blog/all.tsx
  • /blog/:id: ./routes/blog/:id/index.tsx
  • /user/*: ./routes/user/*/index.tsx (wildcard)

Route endpoint files have the + prefix. This allows for components to be stored within the same directory as the routes themselves.

Handlers

Each route file should export at least one of the following: GET, POST, PUT, PATCH, DELETE, and/or ALL. These take in elysia.Context as the sole parameter and take a normal Elysia handler return value.

Example

import { type Context } from 'elysia';

export const GET = () => {
    return (
        <h1>Hello, World!</h1>
    )
}

export const POST = (ctx: Context) => {
    if (ctx.query.success) {
        return {
            body: { success: true },
            status: 200
        }
    }
    return {
        body: { success: false },
        status: 400
    }
}

Error handling

By adding a _error.tsx file to your base routes directory, you can have a endpoint which handles the error. Simply export a HANDLE method with a sole parameter of an error:

export const HANDLE = (error: Error) => {
    console.error(error)
    return {
        status: 301,
        headers: {
            Location: '/'
        }
    }
}

Readme

Keywords

Package Sidebar

Install

npm i elysia-file-router

Weekly Downloads

0

Version

0.0.1-beta.2

License

MIT

Unpacked Size

11.8 kB

Total Files

6

Last publish

Collaborators

  • zacharycoulter