api-fast

快捷创建node接口

Usage no npm install needed!

<script type="module">
  import apiFast from 'https://cdn.skypack.dev/api-fast';
</script>

README

快速创建你的node api接口

安装

npm install api-fast --save

1.1.* 更新内容

[1] 添加多个mysql同时请求的方法
[2] 添加多个mysql相互依赖请求

使用方法 1.0.* -- 1.1.*

const { join, normalize, relative, resolve } = require('path')
let server = require('api-fast')
// 载入配置信息
server.config({
    // 项目路径(最好默认resolve('./'))
    root: resolve('./'),
    // 前端文件上传目录
    static: 'files/',
    // 上传文件缓存路径(root目录下自动创建)
    uploadCache: 'tmp',
    // 前端html运行环境目录
    wwwroot: 'webapps',
    // 跨域配置信息
    cors: {
      origin: [
        'https://www.webascii.cn'
      ],
      credentials: true,  // 是否带cookie
      maxAge: '1728000'
    },
    /**
    * 插件目录(root目录下的plugins文件夹)
    * 请参考"@如何写插件"
    */
    plugins: 'plugins',
    /**
    * 接口目录(root目录下的interface文件夹)
    * 请参考"@如何写接口"
    */
    interface: 'interface',
    // mysql信息(如果不想用mysql,可以mysql:false)
    // 不使用mysql不可开启接口config参数 mysql = false
    mysql: {
        host: 'localhost',
        user: 'root',
        password: '123456',
        port: '3306',
        database: 'database_name',
        multipleStatements: true // 允许多条查询
    },
    // 文件上传默认关键字
    uploadKey: 'files',
    // 启动服务端口号
    port: 10086,
    qiniuConfig: {
        // 七牛云自定义域名(你的自定义域名,用于返回七牛云上传后的绝对路径)
        website: '//cdn.webascii.cn/',
        ak: '', // 七牛AccessKey
        sk: '', // 七牛SecretKey
        scope: 'webascii', // 七牛存储空间名称
        /**
        * 机房	Zone对象
        * 华东	qiniu.zone.Zone_z0
        * 华北	qiniu.zone.Zone_z1
        * 华南	qiniu.zone.Zone_z2
        * 北美	qiniu.zone.Zone_na0
        */
        zone: 'Zone_z1', // 七牛空间(默认Zone_z1)
        pathCDN: 'test/', // 上传到CDN的路径
    }
})
// 启动服务
server.run()

如何写插件

在你的项目目录(root)下创建plugins目录
创建你的插件 myPlugin.js
文件的名字建议以驼峰命名,因为你需要通过此名称调用你的插件
--------比如我们写一个返回x+y的插件--------
module.exports = async (x, y) => {
  return x + y
}
这样你的插件就完成了
如何使用? 请参考"#如何创建接口"里的部分内容

如何创建接口

在你的项目目录(root)下创建interface目录
创建你的接口文件 myInterface.js
支持多级文件夹,文件名随意写
/**
 * 配置信息
 */
module.exports.config = {
  path: '/api/demo', // 接口
  method: 'post', // 请求方式
  dir: 'a/b/c', // 文件保存路径(默认default)
  upload: false, // 是否上传文件到本地 默认: false(优先级 < qiniu)
  verify: false, // 是否开启用户验证: 默认false
  qiniu: false, // 是否开启七牛上传: 默认false(优先级 > upload)
  // 此参数可以不填写,以后补充文档
  qiniuConfig: {
      // 优先级 > server.config.qiniuConfig.pathCDN
      pathCDN: 'kyle/demo/'
  },
  mysql: false, // 是否需要mysql 默认: false
}
/**
 * 验证函数
 * @param param 参数
 * @param req
 * @param res
 * @returns {Promise.<void>}
 * return false 验证失败(终止程序)
 * return other 验证成功
 */
module.exports.verify = async ({req, res, apiConfig, app, connection, param, interfaceApi, result, file, plugins}) => {
  // 这里可以添加你的任意验证逻辑
  // 如果验证失败 return false 即可终止程序
}

/**
 * 参数处理函数
 * return {Boolean} false(终止程序)
 * return {Object} 进入生命周期下一步的param
 */
module.exports.param = async ({req, res, apiConfig, app, connection, param, interfaceApi, result, file, plugins}) => {
  // 这里可以添加你的参数验证逻辑
  // 如果验证失败 return false 即可终止程序
}
/**
 * sql语句 是否使用取决于 config.mysql
 * @returns {{sql: string, sqlParam: Array}}
 * return {Object}
 * Object.sql {String} sql语句,多个sql请用';'隔开
 * Object.sqlParams {Array} sql参数,对应Object.sql的缺省值
 */
module.exports.mysql = async ({req, res, apiConfig, app, connection, param, interfaceApi, result, file, plugins}) => {
  // 是否使用此函数,取决于config.mysql
  return {
    sql: 'INSERT INTO demo(id,url_path) VALUES(0,?)',
    sqlParams: [
      'http://www.webascii.cn'
    ]
  }
}
/**
 * 请求成功
 */
module.exports.success = async ({req, res, apiConfig, app, connection, param, interfaceApi, result, file, plugins}) => {
  // 如何使用你的插件(上文我们创建了pluginx/myPlugin.js这个插件)
  let num = plugins.myPlugin(100, 200) // 300
  res.send({
    status: 200,
    data: {
      xy: num
    }
  })
}

访问按照上文创建的接口

请使用post方式请求接口

http://localhost:10086/api/demo

接口参数说明

module.exports.success = async ({
                                  req,
                                  res,
                                  apiConfig,
                                  app,
                                  connection,
                                  param,
                                  interfaceApi,
                                  result,
                                  file,
                                  plugins
}) => {}
// req: 请求参数
// res: 返回参数
// apiConfig: 当前接口实例
// connection: 数据库实例
// param: 用户通过接口传递过来的参数
// interfaceApi: 当前服务实例
// result: mysql返回结果(取决于是否使用mysql)
// file: 文件上传结果(取决于是否上传了文件)
// plugins: 你的自定义插件

参数说明

module.exports.config = {
  path: '/api/demo',
  method: 'post',
  dir: 'a/b/c',
  upload: false,
  verify: false,
  qiniu: false,
  qiniuConfig: {
    // 优先级 > server.config.qiniuConfig.pathCDN
    pathCDN: 'kyle/demo/'
  },
  mysql: false,
}

config.path // 接口地址
config.method // 接口请求方式
config.uploadKey // 覆盖默认的上传字段
config.dir // 文件保存路径(默认default)
config.upload // 是否上传文件到本地 默认: false(优先级 < qiniu)
config.verify // 是否开启用户验证: 默认false
config.qiniu // 是否开启七牛上传: 默认false(优先级 > upload)

/**
* config.qiniuConfig
* [非必填]
* 七牛配置信息 (config.qiniu == true 生效)
*/
config.qiniuConfig

/**
* config.qiniuConfig.pathCDN
* [非必填]
* 更改默认的server.config.qiniuConfig.pathCDN
* 示例:
* pathCDN存在:website/path[config.qiniuConfig.pathCDN]/fileName.png
* pathCDN不存在:website/path[server.config.qiniuConfig]/fileName.png
*/
config.qiniuConfig.pathCDN

/**
* config.qiniuConfig.scope
* [非必填]
* 更改默认的server.config.qiniuConfig.scope
* 示例:
* scope存在:上传scope == config.qiniuConfig.scope
* scope不存在:上传scope == server.config.qiniuConfig.scope
*/
config.qiniuConfig.scope

/**
* config.qiniuConfig.zone
* [非必填]
* 更改默认的server.config.qiniuConfig.zone
* 示例:
* zone存在:上传zone == config.qiniuConfig.zone
* zone不存在:上传zone == server.config.qiniuConfig.zone
*/
config.qiniuConfig.zone

/**
* config.qiniuConfig.website
* [非必填]
* 更改默认的server.config.qiniuConfig.website
* 示例:
* website存在:website[config.qiniuConfig.website]/path/fileName.png
* website不存在:website[server.config.qiniuConfig.website]/path/fileName.png
*/
config.qiniuConfig.website
/**
* config.qiniuConfig.fileHash
* [非必填]
* 是否允许文件结尾带hash值
* 示例:
* false:website/path/ytd6cyg5v6ky/fileName.png
* true:website/path/fileName-ytd6cyg5v6ky.png
*/
config.qiniuConfig.fileHash 

/**
* config.mysql {Boolean}
* [非必填]
* 默认:false
* false: 不开启mysql
* true: 开启mysql 默认执行module.exports.mysql方法
*/
config.mysql
/**
* config.mysql {Array}
* 开启多个mysql同时请求module.exports.mysql01、module.exports.mysql02
*/
config.mysql = ['mysql01', 'mysql02']

/**
* config.mysqlRely
* [非必填]
* 决定当config.mysql == Array时,是同时执行还是顺序执行
* 默认:false
* 解释:
* false: 同时请求module.exports.mysql01、module.exports.mysql02
* true: 先请求module.exports.mysql01得到结果并把结果作为参数(module.exports.mysql02({result}))给到module.exports.mysql02然后执行module.exports.mysql02
*/
config.mysqlRely

生命周期

avatar