Git Product home page Git Product logo

Comments (6)

razonyang avatar razonyang commented on August 15, 2024 1

I wrote a simple example, is it what you need?

package main

import (
    "path"
    "strings"

    "github.com/buaazp/fasthttprouter"
    "github.com/valyala/fasthttp"
)

type CORS struct {
    origins map[string]bool
}

func (c *CORS) handler(h fasthttp.RequestHandler) fasthttp.RequestHandler {
    return func(ctx *fasthttp.RequestCtx) {
        if host := string(ctx.Host()); c.origins[host] {
            ctx.Response.Header.Set("Access-Control-Allow-Origin", host)
        }

        h(ctx)
    }
}

var (
    cors = &CORS{
        origins: map[string]bool{
            "127.0.0.1:8080": true,
        },
    }
)

func main() {
    routerPath := "/js/*filepath"        // router's path.
    filepath := path.Join("/path/to/js") // file's path

    // Create a file handler.
    fileHandler := fasthttp.FSHandler(filepath, strings.Count(routerPath[:len(routerPath)-10], "/"))

    router := fasthttprouter.New()
    // Wrapped by CORS handler.
    router.GET(routerPath, cors.handler(fileHandler))

    fasthttp.ListenAndServe(":8080", router.Handler)
}

from fasthttprouter.

razonyang avatar razonyang commented on August 15, 2024

@buaazp 我觉得ServeFiles有点难扩展,比如CORS之类的中间件,好像用ServeFiles无法实现。是否有其他方法我没想到的。

from fasthttprouter.

araneta avatar araneta commented on August 15, 2024

Great. Thanks its working.

from fasthttprouter.

buaazp avatar buaazp commented on August 15, 2024

@headwindfly 感谢帮忙解答。

ServeFiles 这些接口都是继承自httprouter,并不是我自己设计的,再加上我自己的线上业务并没有用到这种文件接口,所以也就没关注过,我回头想想怎么把它搞成标准的router用法吧~

from fasthttprouter.

razonyang avatar razonyang commented on August 15, 2024

@buaazp :) 好的,这个issue应该可以关闭了

from fasthttprouter.

mikepc avatar mikepc commented on August 15, 2024

This solution doesn't work. The browser sends an Origin header not a Host header.

from fasthttprouter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.