Skip to content

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

License

Notifications You must be signed in to change notification settings

akira-cn/http-modular

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HTTP-Modular

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

server:

// https://au215ybu51.us.aircode.run/index
import {config, modular} from 'http-modular';

function add(x, y) {
  return x + y;
}

function getUrl(context) {
  const {url} = context;
  return url;
}

export default modular({
  add,
  getUrl,
}, config.aircode);

client

import {add, getUrl} from 'https://au215ybu51.us.aircode.run/index';

console.log(await add(1, 2)); // => 3
console.log(await getUrl()); // => /index

Online demo

Server: https://github.com/AirCodeLabs/aircode/tree/main/examples/modular-demo

Client: https://codepen.io/akira-cn/pen/mdQYvmz

Features

  • 🧸 Tiny size and easy to use.

  • 🌎 Works in any where, almost in all Node.js HTTP servers or cloud environments.

    HTTP-Modular inherently supports the following environments through corresponding configurations:

  • 🧩 Esay to extend.

    You can extend HTTP-Modular to other environments such as Deno, Edge Runtime, or Ben by creating your own configurations.

Usage

  1. Work with Koa:
import Koa from "koa";
import { bodyParser } from "@koa/bodyparser";
import { modular, config } from 'http-modular';

function add(x, y) {
  return x + y;
}

function getHost($context) {
  return $context.request.hostname;
}

const app = new Koa();
app.use(bodyParser());

// response
app.use(modular({ add, getHost }, config.koa));

app.listen(3000);
  1. Work with Express:
import express from "express";
import bodyParser from 'body-parser';
import { modular, config } from 'http-modular';

const app = express();

app.use(bodyParser.json({
  limit: '4.5mb',
  type: '*/*',
}));

function add(x, y) {
  return x + y;
}

function getHost($context) {
  return $context.request.hostname;
}

function getMessage() {
  return {hi: 'there'};
}

app.all('/', modular({ add, getHost, getMessage }, config.express));

app.listen(3000);
  1. Work with Fastify:
import Fastify from 'fastify';
import { modular, config } from 'http-modular';

const fastify = Fastify({
  logger: true
});


function add(x, y) {
  return x + y;
}

function getHost($context) {
  return $context.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}
});
  1. Work with Nitro
import { modular, config } from 'http-modular';

function add(x, y) {
  return x + y;
}

async function echo(...args) {
  const $context = args.pop();
  return await readBody($context);
}

function getMessage() {
  return {hi: 'there'};
}

export default eventHandler(
  modular({add, echo, getMessage}, config.nitro)
);
  1. Work with Vercel api function:
import { modular, config } from 'http-modular';

function add(x, y) {
  return x + y;
}

function echo($context) {
  return $context.request.body;
}

function getMessage() {
  return {hi: 'there'};
}

export default modular({add, echo, getMessage}, config.vercel);
  1. Work with AirCode cloud function:
import {config, modular} from 'http-modular';

function add(x, y) {
  return x + y;
}

function getUrl(context) {
  const {url} = context;
  return 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