/mini-web

Minimalistic Web framework for Node.js, 0 dependencies

Primary LanguageJavaScriptMIT LicenseMIT

The MIT License Coverage npm version npm downloads

Table of Contents

About

This is a minimalistic Web framework for Node.js. It helps you create RESTful APIs.

The idea is to have 0 dependencies while still have all the functionality you would expect from bigger frameworks like Express, Koa, Fastify etc with just a fraction of the footprint.

Install

npm install quarkhttp

## Features

  • Create routes supporting GET, POST, PUT, DELETE HTTP Verbs. There are convenience methods for this:

    app.get('<path>', (req, res) => {})
    app.post('<path>', (req, res) => {})
    app.put('<path>', (req, res) => {})
    app.delete('<path>', (req, res) => {})
  • Reads posted body to either Text or JSON. Use method bodyParse(method) to change how the body is parsed. Valid input values json or text.

  • Has middleware that you can run before handling the actual request. Can be used for Authentication for example.

    app.get('/products', (req, res, next) => {
      if (req.headers['authorization'] === 'abc123') {
        next();
      } else {
        res.statusCode = 401;
        res.send('Not allowed')
      }
    })
  • Handles route parameters and query parameters

    Router parameters

    app.get('/products/:id', (req, res) => {
      console.log(req.params) // for route /products/1 { id: "1" }
    })

    Query parameters

    app.get('/products/', (req, res) => {
      console.log(req.query) // for route /products?page=1&pageSize=20 { page: "1", pageSize: "20"}
    })

Create an app

const quark = require('quarkhttp');

const app = quark();

// ROUTE PARAMETERS
app.get("/products/:id", (req, res) => {
  console.log("query params", req.query);
  console.log('req.params', req.params);
  res.send("product id");
});

app.get('/products', (req, res) => {
  console.log('query params', req.query)
  res.send('text');
})

// POST
app.post('/products', (req,res) => {
  console.info('body', req.body)
  res.json(req.body);
})

// PUT
app.put('/products', (req,res) => {
  console.info('body', req.body)
  res.json(req.body);
})

// MIDDLEWARE
app.get('/orders', (req, res, next) => {
  if (req.headers['authorization'] === 'abc123') {
    console.log('next', next)
    next()
  } else {
    res.statusCode = 401;
    res.send('Not allowed')
  }
}, (req, res) => {
  res.send('Protected route');
})

// Starts listening to requests
app.listen(3000, () => {
  console.log('Server running on 3000');
})