3.2.0 • Published 7 years ago
http-micro v3.2.0
http-micro
Micro-framework on top of node's http module
app.use((ctx) => {
ctx.res.end("Hello world!");
return Promise.resolve();
});
Installation: npm install http-micro
Highlights
- Written in and works with Typescipt.
- Koa-like contexts that can be generically typed in TS.
- Promises for all middleware.
- In-built body-parsing - but only ever parse the body if you need it, providing better security and performance.
- In-built graceful server shutdown with proper keep-alive handling.
- No monkey-patching Node's http module or any other module.
- Provides middleware chaining and composition over core
http
module. - Awaitable
next
middlewares. So, parent middleware has complete control over the execution of the next middleware. - Just use
async/await
and wrap intry-catch
for error handling. No special quirks or ugly special-case callbacks like Express. - High performance (Combined with bluebird promises, performance is on par with node's raw http module).
- Small code-base.
Example
const micro = require("http-micro");
const url = require("url");
let app = new micro.App();
// When using Typescript, context can be
// generically typed to one that implements
// the IContext interface.
//
// `let app = new micro.Application<MyContext>(
// (app, req, res) => new MyContext());`
//
// Raw node req, and res untouched.
// Convenience functions are also provided, used
// later in the example.
app.use(async (ctx, next) => {
if (url.parse(ctx.req.url)
.pathname == "/async") {
ctx.res.end("Hello world from async!");
} else {
await next();
}
});
app.use(async (ctx, next) => {
await next();
})
app.use(async (ctx, next) => {
if (url.parse(ctx.req.url)
.pathname == "/async-await") {
await Promise.resolve();
await Promise.resolve();
ctx.res.end("Hello world from awaited async!");
} else {
await next();
}
});
let router = new micro.Router();
// When using Typescript, can again be generic,
// `let router = new Router<MyContext>();`
router.get("/hello", (ctx) => {
ctx.sendText("Hello route!");
return Promise.resolve();
});
router.get("/hello-string", async (ctx) => {
ctx.sendText("Hello string!");
});
router.get("/hello-object", (ctx) => {
ctx.sendAsJson({ message: "Hello world!" });
return Promise.resolve();
});
let router1 = new micro.Router();
router1.get("/hello", (ctx) => {
ctx.sendText("chain 1: hello!");
return Promise.resolve();
});
let router2 = new micro.Router();
router2.get("/hello", (ctx) => {
ctx.res.end("chain 2: hello!");
return Promise.resolve();
});
router.use("/r1", router1);
router.use("/r2", router2);
app.use(router);
app.listen(8000, "localhost", () => {
console.log("listening");
});
3.2.0
7 years ago
3.1.0
7 years ago
3.0.0
7 years ago
2.0.1
7 years ago
1.13.1
7 years ago
1.13.0
7 years ago
1.12.0
7 years ago
1.11.0
7 years ago
1.10.0
7 years ago
1.9.4
7 years ago
1.9.3
7 years ago
1.9.2
7 years ago
1.9.1
7 years ago
1.9.0
7 years ago
1.8.4
7 years ago
1.8.3
7 years ago
1.8.2
7 years ago
1.8.1
7 years ago
1.8.0
7 years ago
1.7.2
7 years ago
1.7.1
7 years ago
1.7.0
7 years ago
1.6.1
7 years ago
1.6.0
7 years ago
1.5.5
7 years ago
1.5.4
7 years ago
1.5.3
7 years ago
1.5.2
7 years ago
1.5.1
7 years ago
1.5.0
7 years ago
1.4.0
7 years ago
1.3.0
7 years ago
1.2.0
7 years ago
1.1.1
7 years ago
1.1.0
7 years ago
1.0.2
7 years ago
1.0.1
7 years ago
1.0.0
7 years ago