nobushi-request

0.1.0 • Public • Published

NobushiRequest

Build Status

NobushiRequest is a isomorphic HTTP request library.

Installation

npm install --save nobushi-request

Usage

Basic usage

import { RequestClient } from 'nobushi-request';

const client = new RequestClient();

// POST http://localhost:3000/api/posts
client
  .target('http://localhost:3000')
  .path('/api/posts')
  .headers({ 'Content-Type': 'application/json' })
  .post(JSON.stringify({ title: '...', content: '...' }))
  .then(res => res.json())
  .then(({ id, title }) => {
    console.log(`Posted ${title} (#${id})`);
  });

Register filters

client.js
import { RequestClient } from 'nobushi-request';

const client = new RequestClient();

// Applies JSON.stringify() if the request has body.
client.register({
  request(req) {
    if (typeof req.body !== 'object') {
      return req;
    }

    const headers = { ...req.headers, 'Content-Type': 'application/json' };
    const body = JSON.stringify(req.body);
    return { ...req, headers, body };
  },
});

// Parses JSON if the content type is "application/json".
client.register({
  async response(res) {
    const contentType = res.headers.get('Content-Type');
    if (!/^application\/json(;.*)?$/i.test(contentType)) {
      return res;
    }

    const body = await res.json();
    return { ...res, body };
  },
});

export default client;
main.js
import client from './client';

const request = client.target('http://localhost:3000/api');

request
  .path('/posts')
  .post({ title: '...', content: '...' })
  .then(({ body: { id, title }}) => {
    return request
      .path('/notify')
      .post({ message: `Posted ${title} (#${id})` });
  });

License

MIT

Author

@kou64yama

Readme

Keywords

none

Package Sidebar

Install

npm i nobushi-request

Weekly Downloads

0

Version

0.1.0

License

MIT

Last publish

Collaborators

  • kou64yama