zrestify
v0.2.4
Published
zrestify
Downloads
1
Maintainers
Readme
ZRestify
这是一个对Restify的浅封装,会自动生成一个封装后的Restify项目。
why
每次写一个新的服务时,会有一些已经用惯了觉得好用的模块,这个项目主要还是更方便使用而已。
我们在Restify基础上加了什么
整体的项目目录结构规范:
bin目录是启动文件目录,而且文件名和项目名一致。
lib目录是ZRestify的库文件目录。
src是项目公用源文件目录。
ctrl是Ctrl文件目录。
对接口有一个更上层的封装,不仅仅是路由这一级别的,我们称之为Ctrl。
我们使用了winston作为日志模块,lib/logger进行了一层浅封装。
我们对请求返回做了一层封装,目前版本只支持json格式。
我们对数据库进行了一层封装,目前版本主要处理了mysql,封装了队列执行和断线自动重连等。
基于token的session,可以通过Ctrl的构造函数决定该api是否需要登录。
自动的参数检查,必要参数如果不全,底层会自动处理。
统一的Ctrl管理器,新增API非常简单。
快速安装
直接npm全局安装即可。
npm install zrestify -g
如何使用
类似express generator,我们只需要使用zrestify创建一个项目即可。
zrestify testproj
cd testproj
npm install
就会在当前目录下生成一个名为 testproj 的项目,并自动下载依赖库。
默认会添加一个login的API,要求传入name和password,在 ctrl/login.js 文件里修改登录验证过程即可。
默认的端口是3700
如果我们要启动服务,可以使用下面的指令:
node bin/testproj.js
Request
我们的API分为2部分,其中第一部分为主请求名,譬如例子里的login,应该就是 /login。
第二部分是请求参数,如果是 GET 方式,就是 name=XXX&password=XXX 这样的,如果是 POST 方式,是 x-www-from-urlencoded。
API请求成为Ctrl,程序实现如下:
"use strict";
var ctrlmgr = require('../lib/ctrlmgr');
var ctrldef = require('../src/ctrldef');
var apicore = require('../src/apicore');
var adminmgr = require('../src/adminmgr');
var sessionmgr = require('../lib/sessionmgr');
var fs = require("fs");
class Ctrl_Login extends apicore.BaseAPICtrl {
constructor() {
super(ctrldef.CTRLID_REQ_LOGIN, false, ['name', 'password']);
}
onProc(req, res, next) {
// login
// if is ok
sessionmgr.singleton.newSession(req);
apicore.sendMsg_Token(res, req.session.sessionid);
apicore.sendMsg_Common(res, req.params.ctrlid, true);
res.result.send();
next();
}
}
ctrlmgr.singleton.addCtrl(new Ctrl_Login());
Response
现在我们的响应必然返回一个json数组,可以理解为json数组里每个单元都是一条服务器返回。
apicore.sendMsg_Token(res, req.session.sessionid);
apicore.sendMsg_Common(res, req.params.ctrlid, true);
最后,我们通过res.result.send()
将前面的消息一次性的发给客户端。
res.result.send();
更新日志
0.2.0
替换底层项目生成模块为 ZHandlebars 。
0.1.1
修正返回字符串而不是一个json对象的bug。
0.1.0
完成项目框架。
实现 ZRestify 项目生成功能。
使用到的第三方库
- 使用 yargs 模块简化命令行工具的开发。
- 使用 zHandlebars 模板做项目生成模板。