快速创建你的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: 你的自定义插件
参数说明
moduleexportsconfig = 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 configpath // 接口地址configmethod // 接口请求方式configuploadKey // 覆盖默认的上传字段configdir // 文件保存路径(默认default)configupload // 是否上传文件到本地 默认: false(优先级 < qiniu)configverify // 是否开启用户验证: 默认falseconfigqiniu // 是否开启七牛上传: 默认false(优先级 > upload) /*** config.qiniuConfig* [非必填]* 七牛配置信息 (config.qiniu == true 生效)*/configqiniuConfig /*** config.qiniuConfig.pathCDN* [非必填]* 更改默认的server.config.qiniuConfig.pathCDN* 示例:* pathCDN存在:website/path[config.qiniuConfig.pathCDN]/fileName.png* pathCDN不存在:website/path[server.config.qiniuConfig]/fileName.png*/configqiniuConfigpathCDN /*** config.qiniuConfig.scope* [非必填]* 更改默认的server.config.qiniuConfig.scope* 示例:* scope存在:上传scope == config.qiniuConfig.scope* scope不存在:上传scope == server.config.qiniuConfig.scope*/configqiniuConfigscope /*** config.qiniuConfig.zone* [非必填]* 更改默认的server.config.qiniuConfig.zone* 示例:* zone存在:上传zone == config.qiniuConfig.zone* zone不存在:上传zone == server.config.qiniuConfig.zone*/configqiniuConfigzone /*** config.qiniuConfig.website* [非必填]* 更改默认的server.config.qiniuConfig.website* 示例:* website存在:website[config.qiniuConfig.website]/path/fileName.png* website不存在:website[server.config.qiniuConfig.website]/path/fileName.png*/configqiniuConfigwebsite/*** config.qiniuConfig.fileHash* [非必填]* 是否允许文件结尾带hash值* 示例:* false:website/path/ytd6cyg5v6ky/fileName.png* true:website/path/fileName-ytd6cyg5v6ky.png*/configqiniuConfigfileHash /*** config.mysql * [非必填]* 默认:false* false: 不开启mysql* true: 开启mysql 默认执行module.exports.mysql方法*/configmysql/*** config.mysql * 开启多个mysql同时请求module.exports.mysql01、module.exports.mysql02*/configmysql = '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*/configmysqlRely