siujeless
v1.1.0
Published
A tiny fetch-based wrapper for serverless server
Downloads
578
Readme
Siujeless
A serverless version for siuje, the middleware used in siuje can be reused in siujeless without modification.
How to Use
Generally you can create a fetch event listener. For example, in Bun, you can use code like:
import siuje from "siujeless"
// sample for middleware, copy from siuje
const set_header = headers => {
return (req, ctrl) => next => {
ctrl( headers );
return next(req, ctrl);
}
}
Bun.serve({
port: 10001,
fetch: siuje([
set_header({"server": "siujeless"}),
async (req, ctrl) => {
ctrl(200);
return "hello,world";
}
]),
});
With siujeless, your code in siuje can be easily migrated to a serverless environment.
Presets
You can use siujeless.seq
to embed multiple middlewares into one middleware.
import siuje from "siujeless"
// sample for middleware, copy from siuje
const set_header = headers => {
return (req, ctrl) => next => {
ctrl( headers );
return next(req, ctrl);
}
}
const my_headers = siuje.seq(
set_header({"connection": "keep-alive"}),
set_header({"access-control-allow-origin": "*"})
);
Bun.serve({
port: 10001,
fetch: siuje([
set_header({"server": "siujeless"}),
my_headers,
async (req, ctrl) => {
ctrl(200);
return "hello,world";
}
]),
});
Why No Router
Siujeless is designed for use with Cloudflare Page Functions, which utilize a folder-based routing system. If you need a router for a runtime environment like service workder, find-my-way should work well.
import siuje from "siujeless";
import fmw from "find-my-way";
const set_header = headers => {
return (req, ctrl) => next => {
ctrl( headers );
return next(req, ctrl);
}
}
const router = fmw();
router.on("GET", "/hello/:name", siuje(
set_header({server: "siujeless"}),
async (req, ctrl) => (ctrl(200), `hello, ${req.params.name}!!`)
));
Bun.serve({
port: 10001,
fetch: async req => {
const url = new URL(req.url);
const result = router.find(req.method, url.pathname);
if (result) {
req.params = result.params;
return await result.handler( req );
}
else return new Response("not found", {status: 404});
}
});
Of course, if you want a smaller router for saving size, @medley/router also work.
import siuje from "siujeless"
import Router from "@medley/router"
const router = new Router();
// sample for middleware, you may use import to get some custom middleware
const set_header = headers => {
return (req, ctrl) => next => {
ctrl( headers );
return next(req, ctrl);
}
}
function addRoute(method, path, handler) {
const store = router.register(path);
store[method] = handler;
}
addRoute("GET", "/hello/:name", siuje(
set_header({"server": "siujeless"}),
async (req, ctrl) => (ctrl(200), `hello, ${req.params.name}`)
));
Bun.serve({
port: 10001,
fetch: async req => {
const url = new URL(req.url);
const result = router.find(url.pathname);
if (result) {
req.params = result.params;
return await result.store[req.method]( req );
}
else return new Response("not found", {status: 404});
}
});