{"id":19151712,"url":"https://github.com/zhs007/zrestify","last_synced_at":"2026-06-14T14:30:19.203Z","repository":{"id":57406666,"uuid":"47627544","full_name":"zhs007/zrestify","owner":"zhs007","description":null,"archived":false,"fork":false,"pushed_at":"2015-12-17T13:57:13.000Z","size":16,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-03T21:11:20.121Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zhs007.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-12-08T14:34:55.000Z","updated_at":"2015-12-09T07:05:09.000Z","dependencies_parsed_at":"2022-09-05T06:41:44.403Z","dependency_job_id":null,"html_url":"https://github.com/zhs007/zrestify","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhs007%2Fzrestify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhs007%2Fzrestify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhs007%2Fzrestify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhs007%2Fzrestify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zhs007","download_url":"https://codeload.github.com/zhs007/zrestify/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240236361,"owners_count":19769580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T08:15:30.727Z","updated_at":"2026-06-14T14:30:17.084Z","avatar_url":"https://github.com/zhs007.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ZRestify\n这是一个对**Restify**的浅封装，会自动生成一个封装后的**Restify**项目。\n\nwhy\n---\n每次写一个新的服务时，会有一些已经用惯了觉得好用的模块，这个项目主要还是更方便使用而已。\n\n我们在Restify基础上加了什么\n---\n\n* 整体的项目目录结构规范：\n * bin目录是启动文件目录，而且文件名和项目名一致。\n * lib目录是**ZRestify**的库文件目录。\n * src是项目公用源文件目录。\n * ctrl是**Ctrl**文件目录。\n \n* 对接口有一个更上层的封装，不仅仅是路由这一级别的，我们称之为**Ctrl**。\n* 我们使用了winston作为日志模块，*lib/logger*进行了一层浅封装。\n* 我们对请求返回做了一层封装，目前版本只支持json格式。\n* 我们对数据库进行了一层封装，目前版本主要处理了mysql，封装了队列执行和断线自动重连等。\n* 基于token的**session**，可以通过**Ctrl**的构造函数决定该api是否需要登录。\n* 自动的参数检查，必要参数如果不全，底层会自动处理。\n* 统一的**Ctrl管理器**，新增API非常简单。\n\n快速安装\n---\n直接npm全局安装即可。\n\n```\nnpm install zrestify -g\n```\n\n如何使用\n---\n类似express generator，我们只需要使用zrestify创建一个项目即可。\n\n```\nzrestify testproj\ncd testproj\nnpm install\n```\n\n就会在当前目录下生成一个名为 **testproj** 的项目，并自动下载依赖库。\n\n默认会添加一个**login**的**API**，要求传入**name**和**password**，在 *ctrl/login.js* 文件里修改登录验证过程即可。\n\n默认的端口是**3700**\n\n如果我们要启动服务，可以使用下面的指令：\n\n```\nnode bin/testproj.js\n```\n\nRequest\n---\n我们的API分为2部分，其中第一部分为主请求名，譬如例子里的**login**，应该就是 */login*。\n\n第二部分是请求参数，如果是 **GET** 方式，就是 *name=XXX\u0026password=XXX* 这样的，如果是 **POST** 方式，是 *x-www-from-urlencoded*。\n\nAPI请求成为Ctrl，程序实现如下：\n\n```\n\"use strict\";\n\nvar ctrlmgr = require('../lib/ctrlmgr');\nvar ctrldef = require('../src/ctrldef');\nvar apicore = require('../src/apicore');\nvar adminmgr = require('../src/adminmgr');\nvar sessionmgr = require('../lib/sessionmgr');\nvar fs = require(\"fs\");\n\nclass Ctrl_Login extends apicore.BaseAPICtrl {\n    constructor() {\n        super(ctrldef.CTRLID_REQ_LOGIN, false, ['name', 'password']);\n    }\n\n    onProc(req, res, next) {\n        // login\n\n        // if is ok\n        sessionmgr.singleton.newSession(req);\n\n        apicore.sendMsg_Token(res, req.session.sessionid);\n        apicore.sendMsg_Common(res, req.params.ctrlid, true);\n\n        res.result.send();\n\n        next();\n    }\n}\n\nctrlmgr.singleton.addCtrl(new Ctrl_Login());\n```\n\nResponse\n---\n现在我们的响应必然返回一个json数组，可以理解为json数组里每个单元都是一条服务器返回。\n\n```\n        apicore.sendMsg_Token(res, req.session.sessionid);\n        apicore.sendMsg_Common(res, req.params.ctrlid, true);\n```\n最后，我们通过```res.result.send()```将前面的消息一次性的发给客户端。\n\n```\n        res.result.send();\n```\n\n\n更新日志\n---\n\n* **0.2.0**\n * 替换底层项目生成模块为 **ZHandlebars** 。\n \n* **0.1.1**\n * 修正返回字符串而不是一个json对象的bug。\n \n* **0.1.0**\n * 完成项目框架。\n * 实现 **ZRestify** 项目生成功能。\n\n使用到的第三方库\n---\n\n* 使用 **[yargs](https://github.com/bcoe/yargs)** 模块简化命令行工具的开发。\n* 使用 **[zHandlebars](https://github.com/zhs007/zhandlebars)** 模板做项目生成模板。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhs007%2Fzrestify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhs007%2Fzrestify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhs007%2Fzrestify/lists"}