Skip to content

akira-cn/http-modular

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HTTP-Modular

A universal library for converting server-side functions into ES Modules.

HTTP-Modular is a compact RPC library that unlocks the full potential of BFF (Back end for FrontEnd) capabilities.

Gone are the days of cumbersome code like this:

// server-side app.post('/save', async (context) => { ...... const data = await getData(context); const result = await db.save(data); context.body = result; });
// in browser ... const res = await fetch('https://<server.url>:<port>/save', { method: 'POST', body: JSON.stringify(data), headers: { ... } ); const result = await res.json(); ...

Embrace the future of coding with modular capabilities:

// server-side ... async function save(data) { ...... return await db.save(data); } app.all('/action', modular({save, list, delete}, config.koa));
// in browser import {save, list, delete} from 'https://<server.url>:<port>/action'; ... const result = await save(data); // done! ...

Explore the Online Demo

Server: Check out the GitHub repository

Client: Experiment with the library on CodePen

Features

Quick Started

1. Integrating with Koa:

import Koa from "koa"; import { bodyParser } from "@koa/bodyparser"; import { modular, context, config } from 'http-modular'; function add(x, y) { return x + y; } const getHost = context(ctx => ctx.request.hostname); const app = new Koa(); app.use(bodyParser()); // response app.use(modular({ add, getHost }, config.koa)); app.listen(3000);

2. Integrating with Express:

import express from "express"; import bodyParser from 'body-parser'; import { modular, context, config } from 'http-modular'; const app = express(); app.use(bodyParser.json({ limit: '4.5mb', type: '*/*', })); function add(x, y) { return x + y; } const getHost = context(ctx => ctx.request.hostname); function getMessage() { return {hi: 'there'}; } app.all('/', modular({ add, getHost, getMessage }, config.express)); app.listen(3000);

3. Integrating with Fastify:

import Fastify from 'fastify'; import { modular, context, config } from 'http-modular'; const fastify = Fastify({ logger: true }); function add(x, y) { return x + y; } const getHost = context(ctx => ctx.request.hostname); function getMessage() { return {hi: 'there'}; } // Declare a route fastify.all('/', modular({add, getHost, getMessage}, config.fastify)); // Run the server! fastify.listen({ port: 3000 }, function (err, address) { if (err) { fastify.log.error(err); process.exit(1); } // Server is now listening on ${address} });

4. Integrating with Nitro

import { modular, context, config } from 'http-modular'; function add(x, y) { return x + y; } const echo = context(async (ctx) => { return await readBody(ctx); }) function getMessage() { return {hi: 'there'}; } export default eventHandler( modular({add, echo, getMessage}, config.nitro) );

5. Integrating with Vercel API Functions:

import { modular, context, config } from 'http-modular'; function add(x, y) { return x + y; } const echo = context(ctx => ctx.request.body); function getMessage() { return {hi: 'there'}; } export default modular({add, echo, getMessage}, config.vercel);

6. Integrating with AirCode Cloud Functions:

import {config, context, modular} from 'http-modular'; function add(x, y) { return x + y; } const getUrl = context(ctx => ctx.url); export default modular({ add, getUrl, }, config.aircode);

About

A universal library for converting server-side functions into ES Modules.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •