Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

nuxt-resource-module

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nuxt-resource-module

@nuxtjs/axios based API request wrapper for Nuxt.js

  • 0.5.0
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

Nuxt.js Resource Module

⚠️Alpha version

Status

CircleCI

Features

  • @nuxtjs/axiosをラップした HTTP リクエストモジュール
  • asyncData と fetch でリクエストしたリクエストを遷移後まで遅延させられます
    • リンクをクリックしてすぐに遷移します
    • 遷移後リクエストを行い、response.data をそのまま data プロパティにマッピングします
    • SSR 時は遅延させずにそのままリクエストします
  • キャンセル可能なリクエストを簡単に作れます
    • 遷移するときはリクエスト中のリクエストを自動でキャンセルします
  • リクエスト時にレスポンスを加工する処理を追加できます
  • 内部でエラーハンドリングしているので使うときにエラーが投げられることはありません

  • HTTP request module wrapping @nuxtjs/axios
  • AsyncData and fetch requested requests can be delayed until after transition
    • Immediate transition
    • Make a request after the transition and map response.data to the data property
    • When requesting SSR, do not delay but request as is
  • Easily create cancelable requests
    • When making a transition, cancel request in request automatically
  • You can add a process to modify the response on request
  • Since error handling is done internally, no error is thrown when using

Install

$ yarn add nuxt-resource-module

nuxt.config.js

module.exports = {
  // ...
  modules: [
    'nuxt-resource-module', // required before @nuxtjs/axios
    '@nuxtjs/axios',
  ],
  // ...

  // options (See options section)
  'resource-module': {
    methods: ['get', 'post'],
  },
};

Usage

export default {
  // asyncData
  async asyncData({ app, error }) {
    // default request
    const response = await app.$_resource.get({
      url: '/users',
    });

    // delay request
    const response = await app.$_resource.delay.get({
      url: '/users',
      // response.data mapper
      dataMapper(response: ResourceResponse) {
        const { delayed, data } = response;
        return delayed ? { users: [] } : { users: data.users };
      },

      // response
      processor(response: ResourceResponse) {
        if (response.status !== 200) {
          error({ statusCode: response.status, message: 'Request error' })
        }
        return response;
      },
    });
  },

  // methods
  methods: {
    // cancel
    async searchUser() {
      this.$_resource.cancel('/users/search');
      const response = await this.$_resource.mayBeCancel.get({ url: '/users/search' });
      if (response.canceled === true) {
        // when cancel
      }
    },
  },
}

// Vuex
export const actions = {
  async searchUser() {
      this.$_resource.cancel('/users/search');
      const response = await this.$_resource.mayBeCancel.get({ url: '/users/search' });
      if (response.canceled === true) {
        // when cancel
      }
  }
}

API

Methods

Request methods
Default request methods
  • $_resource.request(config: ResourceRequestConfig)
  • $_resource.get(config: ResourceRequestConfig)
  • $_resource.delete(config: ResourceRequestConfig)
  • $_resource.head(config: ResourceRequestConfig)
  • $_resource.post(config: ResourceRequestConfig)
  • $_resource.put(config: ResourceRequestConfig)
  • $_resource.patch(config: ResourceRequestConfig)
Delay request methods

クライアントとサーバーで動作が変わります。
There are client and server behavior changes.

client: asyncData または fetch で利用した場合は、遷移が確定してからリクエストが呼ばれます。
server: デフォルトメソッドを使ったときと同じです。使ったときにそのままリクエストを送ります。

client: When used with asyncData or fetch, it is called after the transition is confirmed.
server: Same as default method. Send a request when called.

  • $_resource.delay.request(config: ResourceRequestConfig)
  • $_resource.delay.get(config: ResourceRequestConfig)
  • $_resource.delay.delete(config: ResourceRequestConfig)
  • $_resource.delay.head(config: ResourceRequestConfig)
  • $_resource.delay.post(config: ResourceRequestConfig)
  • $_resource.delay.put(config: ResourceRequestConfig)
  • $_resource.delay.patch(config: ResourceRequestConfig)
May be cancel request methods

キャンセル可能なリクエストになります。$_resource.cancel()と一緒に使います。
It will be a request that can be canceled. Use with $_resource.cancel().

  • $_resource.mayBeCancel.request(config: ResourceRequestConfig)
  • $_resource.mayBeCancel.get(config: ResourceRequestConfig)
  • $_resource.mayBeCancel.delete(config: ResourceRequestConfig)
  • $_resource.mayBeCancel.head(config: ResourceRequestConfig)
  • $_resource.mayBeCancel.post(config: ResourceRequestConfig)
  • $_resource.mayBeCancel.put(config: ResourceRequestConfig)
  • $_resource.mayBeCancel.patch(config: ResourceRequestConfig)
Cancel methods
  • $_resource.cancel(url: ResourceRequestConfig.url)
  • $_resource.cancelAll()
    • Automatically call with beforeEach
Delay methods
  • $_resource.requestDelayedRequest()
    • Request all delayed requests
    • Automatically call within the next function of beforeRouteEnter.
  • $_resource.clearDelayedRequest()
    • Clear all delayed requests
    • Automatically call with beforeEach
Extending methods
  • $_resource.setEachProcessor(fn: Function)

Types

ResourceRequestConfig

Extends AxiosRequestConfig

export interface ResourceRequestConfig extends AxiosRequestConfig {
  url: string;
  dataMapper?: (response: ResourceResponse) => any;
  processor?: (response: ResourceResponse) => any;
}

e.g.

{
  url: '/users/search',  // require
  params: { // Can also use axios config
    query: 'Alice',
  },
  dataMapper(response) {  // option
    const { delayed, data } = response;
    return delayed ? { users: [] } : { users: data.users };
  },
  processor(response) { // option
    if (response.status !== 200) {
      error({ statusCode: response.status, message: 'Request error' })
    }
    return response;
  },
}
ResourceResponse

Extends AxiosResponse

export interface ResourceResponse extends AxiosResponse {
  canceled: boolean;
  delayed: boolean;
}

Extending

Each processor

plubins/resource-module.js
export default ({ app }) => {
  const { $_resource } = app;
  const eachProcessor = (response) => {
    return {
      status: response.status,
      isError: response.status !== 200,
      data: response.data,
      delayed: response.delayed,
      canceled: response.canceled,
    };
  };
  $_resource.setEachProcessor(eachProcessor);
};
nuxt.config.js
module.exports = {
  // ...
  modules: [
    'nuxt-resource-module', // required before @nuxtjs/axios
    '@nuxtjs/axios',
  ],
  // ...

  plugins: [
    '~/plugins/resource-module',
  ],
};
application code
export default {
  async asyncData({ app }) {
    const response = await app.$_resource.get({
      url: '/users',
    });
    console.log(response) // { status: 200, isError: false, data: ... }
  },
};

Options

methods

  • Default: ['get', 'delete', 'head', 'post', 'put', 'patch']

使うリクエストメソッドを定義できます。

e.g.

// nuxt.config.js
module.exports = {
  // ...
  'resource-module': {
    methods: ['get'],
  },
};

When

async asyncData({ app }) {
  // ok
  const response = await app.$_resource.get({
    url: '/users',
  });

  // undefined
  const response = await app.$_resource.post({
    url: '/users',
    data: {
      name: 'new user',
    },
  });
},

Keywords

FAQs

Package last updated on 16 Dec 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc