Add a simple go server to serve the frontends

This commit is contained in:
Lucas Schumacher 2024-06-19 22:22:01 -04:00
parent c57fc11c5e
commit 58e435a7bd
5 changed files with 80 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
tmp

17
Makefile Normal file
View File

@ -0,0 +1,17 @@
all: build
nil:
reactNextJS/out/*: reactNextJS/app/* reactNextJS/*.js reactNextJS/*.json
cd reactNextJS && npm run build
nextjs: reactNextJS/out/*
serverdeps: nextjs *.go reactNextJS/addToServer.go
build: serverdeps
go build server.go
run: serverdeps
go run server.go
air: nextjs nil
air server.go
.PHONY: all build nextjs serverdeps run air nil

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module frontends
go 1.22.3

View File

@ -0,0 +1,28 @@
package reactNextJS
import (
"embed"
"fmt"
"io/fs"
"net/http"
)
//go:embed "out/*"
var nextFiles embed.FS
//go:embed "out/_next"
var nextScripts embed.FS
// Call this from main once before starting the server
func AddNextStaticClient() {
scriptsSubFolder, err := fs.Sub(nextScripts, "out")
if err != nil {
panic(fmt.Sprint("Error: Could not find \"reactNextJS/out/\". Did you build the reactNextJS client?"))
}
filesSubFolder, _ := fs.Sub(nextFiles, "out")
var nextScriptsServer = http.FileServerFS(scriptsSubFolder)
var nextFilesServer = http.FileServerFS(filesSubFolder)
http.Handle("/reactNextJS/", http.StripPrefix("/reactNextJS/", nextFilesServer))
http.Handle("/_next/", nextScriptsServer)
}

31
server.go Normal file
View File

@ -0,0 +1,31 @@
package main
import (
"embed"
"fmt"
"frontends/reactNextJS"
"net/http"
)
const PORT = 3003
//go:embed "vanillaJS"
var vanillaJS embed.FS
//go:embed "react"
var react embed.FS
//go:embed "reactNextJS/out"
var nextStatic embed.FS
func main() {
http.Handle("/vanillaJS/", http.FileServerFS(vanillaJS))
http.Handle("/react/", http.FileServerFS(react))
reactNextJS.AddNextStaticClient()
err := http.ListenAndServe(fmt.Sprintf(":%d", PORT), nil)
if err != nil {
panic(fmt.Sprintf("Error starting server: %s", err))
}
}