sai umesh
Posted on August 9, 2020
Slide is one of the fastest frameworks, built on top of fasthttp. People coming from express will feel at home.
Motivation
While playing around with the Go’s net/http, one thing that we missed most was the lack of middleware support and the problems it solves. After a little reading, we decided to write our own web framework which would solve the issues like middleware support with next, handle a wide range of files, Upload, Download, etc.
🚀 Example
package main
import (
"log"
"github.com/go-slide/slide"
"github.com/go-playground/validator/v10"
)
func main() {
validate := validator.New()
config := slide.Config{
Validator: validate,
}
app := slide.InitServer(&config)
app.Get("/", func(ctx *slide.Ctx) error {
return ctx.Send(http.StatusOK, "Hello, World")
})
log.Fatal(app.Listen("localhost:4321"))
}
Features
Slide supports Middleware with Next function
Express
var express = require('express')
var app = express()
app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
Slide
app := slide.InitServer(&config)
## Application level
// you can multiple middlewares also
app.Use(func(ctx *slide.Ctx) error {
fmt.Println("this will run for all URL(s)")
return ctx.Next()
})
Nested (Grouped) Routes
Express
var express = require('express')
var router = express.Router()
var auth = require('./auth')
router.use('/auth', auth)
// auth.js
var express = require('express')
var router = express.Router()
// GET /auth/login
router.get('/login', function (req, res, next) {
res.send('this is the index auth/login')
});
module.exports = router
Slide
auth := app.Group("/auth")
auth.Use(func(ctx *slide.Ctx) error {
fmt.Println("this will run for all /auth URL(s)")
return ctx.Next()
})
auth.Get("/login", func(ctx *slide.Ctx) error {
return ctx.Send(http.StatusOK, "Hello, World")
})
Files
Slide supports wide range of helpers for file
// serve dir
app.ServerDir("/static", "static")
// single file
app.ServeFile("/js", "static/login.js")
// Downloading file
app.Get("/download", func(ctx *slide.Ctx) error {
return ctx.SendAttachment("static/login.js", "login.js")
})
// uploading file
app.Post("/upload", func(ctx *slide.Ctx) error {
return ctx.UploadFile("static/login.js", "login.js")
})
// serve single from route
app.Get("/servefile", func(ctx *slide.Ctx) error {
return ctx.ServeFile("static/index.html")
})
We would love to hear feedback from you. Thank you for reading.
💖 💪 🙅 🚩
sai umesh
Posted on August 9, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
mentalhealth Finding Strength in Code: Navigating Emotional Overwhelm as a Software Engineer
August 8, 2024