restar
    TypeScript icon, indicating that this package has built-in type declarations

    2.0.8 • Public • Published

    Restar

    NPM Version Build Status Coverage Status Node Version

    Web library for rest api, async/await supported, simplistic with zero dependencies.

    Installation

    npm i restar -S

    Benefits

    • respond elegantly
    app.get('/hello', () => {
      // return 'hello';
      return { s: 'hello' };
    });
    • comprehensible middleware
    app.use(req => {
      req.startAt = Date.now();
    });
     
    app.get('/hello', () => {
      return 'hello';
    });
     
    app.end((req, res) => {
      res.setHeader('X-Response-Time', `${Date.now() - req.startAt}ms`);
    });
     
    /* only /hello set response time */
    // app.end('/hello', (req, res) => {
    //   res.setHeader('X-Response-Time', `${Date.now() - req.startAt}ms`);
    // });
    • error handling elegantly
    app.get('/test', () => {
      throw new Error('test err');
    });
     
    app.catch(e => (req, res) => {
      return e.message || 'an error';
    });
     
    /* catch errors with route*/
    // app.catch('/test', e => (req, res) => {
    //   return e.message + '2' || 'an error';
    // });
    • async/await supported
    app.get('/sleep', async () => {
      await sleep();
      return 'sleep 1s';
    });
     
    function sleep(delay = 1000) {
      return new Promise(resolve => setTimeout(resolve, delay));
    }
    • mount static directory with route
    const serveStatic = require('serve-static');
    app.use(serveStatic(path.join(__dirname, 'public')));
    /*serve static with route*/
    // app.use('/doc', routeStatic('/doc'), serveStatic(path.join(__dirname, '../public', 'doc')));
     
    function routeStatic(path) {
      return function(req, res, next) {
        const tail = req.url.split(path)[1];
        if (!tail.includes('/')) {
          res.statusCode = 302;
          res.setHeader('Location', (path + '/' + tail).replace('//', '/'));
          res.end();
        } else {
          req.url = req.url.replace(path, '');
          next();
        }
      };
    }

    Usage

    const Restar = require('restar');
    let app = new Restar();
     
    // use a global plugin
    app.use((req, res) => {
      res.setHeader('X-Powered-By', 'Restar');
    });
     
    // equal to res.json({ name: 'restar' }) in express
    app.get('/test', () => ({ name: 'restar' }));
     
    // you can retrieve parameters by deconstructing
    // (req,res)-({query,body})-({param:assign(query,body)})
    app.post('/test', ({ param: { name } }) => {
      return name || null;
    });
     
    app.get(
      '/sleep',
      async () => {
        await sleep();
      },
      () => 'sleep 1s'
    );
     
    function sleep(delay = 1000) {
      return new Promise(resolve => setTimeout(resolve, delay));
    }
     
    app.listen(3000);

    Async handler

    app.[get|post|put|head|delete|options|all](handler1,handler2...)

    handler(req?:IncomingMessage,res?:ServerResponse) : void|string|json|Buffer|ReadStream

    app.get('/sleep', async () => {
      await sleep();
      return 'sleep 1s';
    });
     
    function sleep(delay = 1000) {
      return new Promise(resolve => setTimeout(resolve, delay));
    }

    API

    app.use((req,res,next?)=>{})

    Like express middleware

    const serveStatic = require('serve-static');
    app.use(serveStatic(path.join(__dirname, 'public')));

    app.end((req,res,next?)=>{})

    Like express middleware, execute after route handling

    app.end((req, res) => {
      res.setHeader('X-Response-Time', `${Date.now() - req.startAt}ms`);
    });

    app.catch(e=>(req,res,next?)=>{})

    Error handling

    app.catch(e => () => {
      return e.message || 'an error';
    });

    Examples

    Looking for more usages and examples

    https://github.com/cooperhsiung/restar-examples

    Boilerplate

    Restar app boilerplate

    https://github.com/cooperhsiung/restar-kit

    Caveats

    path-to-regex is unsupported

    In view of the above, in most cases we may not need path-to-regex in restful web application

    License

    MIT

    Keywords

    Install

    npm i restar

    DownloadsWeekly Downloads

    0

    Version

    2.0.8

    License

    MIT

    Unpacked Size

    16.1 kB

    Total Files

    12

    Last publish

    Collaborators

    • cooperhsiung