Skip to content

yarlson/chistaticmiddleware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chi Static Middleware

Chi Static Middleware is a Go package designed to work with the Chi router for serving static files efficiently. It is versatile, supporting both physical and embedded file systems, making it suitable for a wide range of applications, including web servers, SPAs, and HTMX.

Features

  • Serve static files with configurable URL prefixes.
  • Support for physical and embedded file systems.
  • Debug logging capabilities.
  • Customizable logging interface.
  • Configurable cache duration for static files.

Installation

To install Chi Static Middleware, use the following command:

go get github.com/yarlson/chistaticmiddleware@v0.3.0

Usage

Basic Setup

First, import the package along with Chi:

import (
    "github.com/go-chi/chi/v5"
    "github.com/yarlson/chistaticmiddleware/static"
)

Configuring Cache Duration

Set the cache duration for your static files to control browser caching. This is particularly useful for optimizing load times and reducing server load.

staticConfig := static.Config{
    // ... other config settings ...
    CacheDuration: 24 * time.Hour, // Cache static files for 24 hours
}

Using Physical File System

To serve files from a physical file system, configure the middleware like so:

package main

import (
	"github.com/go-chi/chi/v5"
	"github.com/yarlson/chistaticmiddleware/static"
	"os"
	"time"
)

func main() {
	r := chi.NewRouter()

	staticConfig := static.Config{
		Fs:            os.DirFS("path/to/static/files"),
		Root:          "", // use "" for the root
		FilePrefix:    "/static",
		CacheDuration: 24 * time.Hour, // Optional: Cache for 24 hours
	}

	r.Use(static.Handler(staticConfig))

	// setup other routes and start server...
}

Using Embedded File System

If you're using Go 1.16 or later, serve static files from an embedded file system:

package main

import (
	"embed"
	"github.com/go-chi/chi/v5"
	"github.com/yarlson/chistaticmiddleware/static"
	"time"
)

//go:embed path/to/static/files/*
var staticFiles embed.FS

func main() {
	r := chi.NewRouter()

	staticConfig := static.Config{
		Fs:            staticFiles,
		Root:          "path/to/static/files",
		FilePrefix:    "/static",
		CacheDuration: 24 * time.Hour, // Optional: Cache for 24 hours
	}

	r.Use(static.Handler(staticConfig))

	// setup other routes and start server...
}

Debugging

Enable debugging by setting the Debug flag in the configuration:

staticConfig := static.Config{
    // ... other config
    Debug: true,
}

Custom Logging

Implement the Logger interface to integrate custom logging:

type CustomLogger struct {
    // implementation of the Logger interface
}

func (l *CustomLogger) Printf(format string, v ...interface{}) {
    // implementation
}

staticConfig := static.Config{
    // ... other config
    Logger: &CustomLogger{},
}

License

This project is licensed under the MIT License. See the LICENSE.md file for details.