mirror of
https://github.com/syumai/workers.git
synced 2025-03-10 17:29:11 +00:00
update implementation of R2 example
This commit is contained in:
parent
a95ca1de25
commit
78dc0e3ad8
@ -5,7 +5,7 @@ dev:
|
||||
.PHONY: build
|
||||
build:
|
||||
mkdir -p dist
|
||||
tinygo build -o ./dist/app.wasm -target wasm ./main.go
|
||||
tinygo build -o ./dist/app.wasm -target wasm ./...
|
||||
|
||||
.PHONY: publish
|
||||
publish:
|
||||
|
@ -29,6 +29,8 @@ func newPromise(fn js.Func) js.Value {
|
||||
}
|
||||
|
||||
func awaitPromise(promiseVal js.Value) (js.Value, error) {
|
||||
fmt.Println("await promise")
|
||||
fmt.Println(promiseVal.Call("toString").String())
|
||||
resultCh := make(chan js.Value)
|
||||
errCh := make(chan error)
|
||||
var then, catch js.Func
|
||||
@ -47,8 +49,10 @@ func awaitPromise(promiseVal js.Value) (js.Value, error) {
|
||||
promiseVal.Call("then", then).Call("catch", catch)
|
||||
select {
|
||||
case result := <-resultCh:
|
||||
fmt.Println("got result of promise")
|
||||
return result, nil
|
||||
case err := <-errCh:
|
||||
fmt.Println("got error of promise")
|
||||
return js.Value{}, err
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/syumai/workers"
|
||||
@ -11,7 +12,8 @@ import (
|
||||
// bucketName is R2 bucket name defined in wrangler.toml.
|
||||
const bucketName = "BUCKET"
|
||||
|
||||
func handleErr(w http.ResponseWriter, msg string) {
|
||||
func handleErr(w http.ResponseWriter, msg string, err error) {
|
||||
log.Println(err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
w.Write([]byte(msg))
|
||||
}
|
||||
@ -19,15 +21,17 @@ func handleErr(w http.ResponseWriter, msg string) {
|
||||
// This example is based on implementation in syumai/workers-playground
|
||||
// * https://github.com/syumai/workers-playground/blob/e32881648ccc055e3690a0d9c750a834261c333e/r2-image-viewer/src/index.ts#L30
|
||||
func handler(w http.ResponseWriter, req *http.Request) {
|
||||
fmt.Println("new R2Bucket")
|
||||
bucket, err := NewR2Bucket(bucketName)
|
||||
if err != nil {
|
||||
handleErr(w, "failed to get R2Bucket\n")
|
||||
handleErr(w, "failed to get R2Bucket\n", err)
|
||||
return
|
||||
}
|
||||
imgPath := req.URL.Path
|
||||
fmt.Println("bucket.get")
|
||||
imgObj, err := bucket.Get(imgPath)
|
||||
if err != nil {
|
||||
handleErr(w, "failed to get R2Object\n")
|
||||
handleErr(w, "failed to get R2Object\n", err)
|
||||
return
|
||||
}
|
||||
w.Header().Set("Cache-Control", "public, max-age=14400")
|
||||
@ -37,6 +41,7 @@ func handler(w http.ResponseWriter, req *http.Request) {
|
||||
contentType = *imgObj.HTTPMetadata.ContentType
|
||||
}
|
||||
w.Header().Set("Content-Type", contentType)
|
||||
fmt.Println("return result")
|
||||
io.Copy(w, imgObj.Body)
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,7 @@ func (r *r2Bucket) Get(key string) (*R2Object, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
fmt.Println(v)
|
||||
if v.IsNull() {
|
||||
return nil, nil
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ func (o *R2Object) BodyUsed() (bool, error) {
|
||||
// toR2Object converts JavaScript side's R2Object to *R2Object.
|
||||
// * https://github.com/cloudflare/workers-types/blob/3012f263fb1239825e5f0061b267c8650d01b717/index.d.ts#L1094
|
||||
func toR2Object(v js.Value) (*R2Object, error) {
|
||||
fmt.Println("toR2Object")
|
||||
uploaded, err := dateToTime(v.Get("uploaded"))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error converting uploaded: %w", err)
|
||||
|
@ -9,9 +9,11 @@ const load = WebAssembly.instantiate(mod, go.importObject).then((instance) => {
|
||||
return instance;
|
||||
});
|
||||
|
||||
export default {
|
||||
async fetch(req) {
|
||||
await load;
|
||||
return handleRequest(req);
|
||||
},
|
||||
};
|
||||
async function processRequest(event) {
|
||||
const req = event.request;
|
||||
await load;
|
||||
console.log("finished loading");
|
||||
return handleRequest(req);
|
||||
}
|
||||
|
||||
addEventListener("fetch", (event) => event.respondWith(processRequest(event)))
|
||||
|
Loading…
x
Reference in New Issue
Block a user