1.0.4 • Published 7 years ago

an-adaptor v1.0.4

Weekly downloads
3
License
ISC
Repository
github
Last release
7 years ago

an-adaptor

Example

const Adaptor = require('an-adaptor');

const adaptor = new Adaptor({
  adaptorName: 'http',
  http: {
    url: 'https://api-m.mtime.cn/PageSubArea/HotPlayMovies.api'
  },
  apis: {
    GET_USERS: {
      adaptorName: 'http'
    }
  },
  validators: {
    GET_USERS: {
      reqData: {
        locationId: 'number'
      }
    }
  }
});

adaptor.dispatch(name, {
  params: {
    locationId: 365
  },
  valiReq: true
});

Usage

new Adaptor(options): options

apis <object>
  执行 dispatch 时使用的方法。
validatiors <object>
  验证请求和返回数据的参数。
adaptor <objcet>
  一些 adaptor 及其调用的名字
[adaptorName] <string>
  请求将会使用的 adaptor
[http] <object>
  参数同 api 中的 http
[mock] <object>
  参数同 api 中的 mock
[local] <object>
  参数同 api 中的 local
[redis] <object>
  参数同 api 中的 redis
[database] <object>
  参数同 api 中的 database
[schemas] <object>
  数据库需要的数据模型
[middlewares] <Array | Object>
  增加中间件,参数与 api 中的 middlewares 一致。

apis: api

middlewares

中间件

[enable] <boolean>
  是否会被执行,默认不执行
adaptor <string|array>
  在哪些 adaptor 中有效
priority <number>
  优先级
module <function(ctx, next)>
  中间件执行函数
adaptorName

请求方式

http

http 请求参数

http 参数数据格式参考: https://www.npmjs.com/package/axios#request-config
mock

mock 请求参数

total <number>
  当要 mock 一个数组时需传入请求数量。
data
  mock 数据格式。当需要一个数组时,在最外层加上[]。
  https://github.com/nuysoft/Mock/wiki/Syntax-Specification
local

local 本地请求参数

publicPath <string>
  本地数据的公共路径。建议传入一个绝对地址。
filePath <string>
  本地数据的文件路径。
func <function(resolve, reject)>
  本地数据请求函数。如果设置了这个参数,则忽略文件请求。
redis

redis 数据库请求参数

method <string>
  请求方法
dataType <string>
  redis 中的数据类型:'string' | 'list' | 'set' | 'hash' | 'sortSet'
host <string>
  redis 数据库主机名
port <number>
  redis 数据库端口名
params: key <string>
          要查询或添加的数据的 key
        [value]<object|string|number>
          要修改或添加的数据的 value
        [range] <array>
          查询 list/sortSet 数据时要给出的查询范围
        [index] <number>
          删除 list 数据时要给出的数据所在的位置
        params 参数也可在 dispatch 时传入。
database

数据库请求参数

method <string>
  请求方法
uri <string>
  数据库 uri
schemaName <string>
  schemas 中需要的 schema 名
collection <string>
  集合名
[options] <object>
  mongoose.connect 时候传入的参数
  http://mongoosejs.com/docs/connections.html#options
params:  data <object>
           查询方式/添加的数据
         [skip] <number>
           跳过多少数据查询
         [limit] <number>
           只查询多少数据
         [sort] <object>
           数据排序方式
         [update] <objcet>
           数据更新方式
         params 参数也可在 dispatch 时传入。
         (以上都是 mongoose 中的标准格式)

validators: validator

reqData

验证请求数据格式。 与 Mock.valid 格式一致。

resData

验证响应数据格式 与 Mock.valid 格式一致。

API

use

增加中间件。

app.use(middleware);
middleware <object|array>: [enable] <boolean>
                             是否会被执行,默认不执行
                           adaptor <string|array>
                             在哪些 adaptor 中有效
                           priority <number>
                             优先级
                           module <function(ctx, next)>
                             中间件执行函数

dispacth

向目标 adaptor 发起请求。

app.dispatch(name, options);
name <string>
  执行 api 的名字
[options]: [params] <object>
             请求的数据参数,也是要验证的数据参数。默认没有参数。
           [valiReq] <boolean|number>
             是否验证请求数据|给验证请求数据的中间件设置优先级。默认 false。
           [valiRes] <boolean|number>
             是否验证响应数据|给验证响应数据的中间件设置优先级。默认 false。

返回一个 Promise 对象:

adaptor.dispatch(name, options).then(ctx => {
    // ctx 中有 res、originalResponse、validator、api、http、mock、local、redis、database、params、schemas
}).catch(err => {
  // 一些处理错误的代码
});

推荐在 dispatch 中传递 params,便于参数共享。

作为 express 中间件

var Promise = require('bluebird');
var Adaptor = require('an-adaptor');
var express = require('express');
var app = Promise.promisifyAll(express());

app.use(Adaptor.express({
  adaptorName: 'http',
  http: {
    url: 'https://api-m.mtime.cn/PageSubArea/HotPlayMovies.api'
  },
  apis: {
    GET_DATA: {}
  }
}));

app.get('/', (req, res) => {
  req.dispatch('GET_DATA').then(ctx => {
    res.send(ctx.res);
  });
});

app.listenAsync(8000).then(() => {
  console.log('listen 8000');
}).catch(err => {
  console.log(err);
});

Adaptor.express 中传入与 Adaptor 相同的参数,req.dispatch 参数与 adaptor.dispatch 一致。