前言

  都说nodejs适合制作restful_API,因为它有异步处理能力,能吞吐更多的请求,这一点是大家都认可的。前不久我使用nodejs+express+postgresql搭建了一个restful中间处理平台,感觉express的api在代码量多的时候,显得凌乱。然后我开发了一个能够更好的组织express代码的module,借鉴了一些java中的想法。希望达到一种平衡,一种更优雅的方式组织代码。

express

  一个express项目的编码流程,大概是几步,

  1.初始化app (express())

  2.引入routes  引入路由,再由路由分发router

  3.定义router

  4.编写methods,get、post之类的响应

  5 前端请求

  

  

  拿我自己的项目看,这是一个router:

var express = require("express");
var router = express.Router();
var config = require("config-lite");
var check = require("../lib/check");
var select = require("../db/select"); router.get("/",check,(req,res,next)=>{
res.render("index",{
pageName:"jiankong"
})
});
router.post("/",check,(req,res,next)=>{
res.send({
msg:"jiankong"
})
});
module.exports = router;

这里面能有什么问题?——当代码量增大,各种app.get .post堆在一个文件夹下,或者把这些拆分成大量文件。这显然不利于代码的维护。

我的解决方案

  我需要解决编写restful或者web应用时,代码不容易理解的问题。 所以我写了一个module:Ting.js

  我需要的特性:

  1.能够根据代码生成文档

  2.代码逻辑更清晰

  3.最好router能够直接配置

经过半个多月的开发。现在我的代码已经改造了我所有的项目。我认为它的代码逻辑足够清晰。比如router的定义:

    module.exports = [
{
brie:"首页",
desc:"这是首页的整体说明",
path:"/",
class:Home,
rules:{ //对象
get:[
{
brie:"这是首页的get访问方法",
desc:"返回了hello world",
path:"/",
controller:["getHome"]
}
]
}
}
]

这段代码配置了一个path是/的router  其中它有一个get方法,处理函数是类Home的getHome方法。

感兴趣?那看看下面的教程,运行一个demo试试

ting.js

  

ting.js for 1.1.12 基于express的server工程化组件

Ting.js简述
Ting.js是一款基于express的server工程化组件,它的主要作用,在于简化express的较繁杂router操作,使nodejs的server端API变得更加友好。附加功能可以实时生成路由文档,使api请求一目了然,简洁代码的同时保持了express可扩展性能。

开始之前

在一切开始之前,你需要具备express知识,另外,需要生成一份package.json。
准备就绪后,就开始吧!

 

Step 1: 下载express

你需要先下载express:
项目目录打开命令行运行 npm install express --save

 

Step 2: 下载ting.js

你需要先下载express:
项目目录打开命令行运行 npm install ting.js --save

 

Step 3: 创建index.js

入口文件

const path = require("path");
//引入express
const express = require("express");
//express_app
var app = express();
var ting = require("ting.js");
//定义routes
var routes = require("./routes");
//引入_package
var _package = require("./package.json");
//doc路径
_package.doc.path = path.join(__dirname,_package.doc.path);
//初始化
var ting_fn = function(init){
init(routes);
}
//生成路由
ting(app,ting_fn,_package);
//监听
app.listen(8090,()=>{
console.log("ting_server started 8090");
});

Step 4: 创建routes.js

配置routes规则

//处理类
var Home = require("./home.class");
//定义规则
module.exports = [
{
brie:"首页",
desc:"这是首页的整体说明",
path:"/",
class:Home,
rules:{ //对象
get:[
{
brie:"这是首页的get访问方法",
desc:"返回了hello world",
path:"/",
Examination:true, //开启代码视图
controller:["getHome"]
}
]
}
}
]

Step 5: 创建home.class.js

替代复杂的router,使用类文件作为请求入口

class Home{
main(){
}
getHome(req,res,next){
res.send("hello world");
}
}
module.exports = Home;

Step 6: 运行测试

项目目录打开命令行运行
node index
访问localhost:8090
你可以看到类Home调用了getHome,顺利返回hello world,

它还可以生成文档,在每次启动时根据package中的version生成html文档,配置方法在API中,也可以在我的gethub上的serverdemo中看到,地址附在资源一栏中。

总结

  我觉得ting.js还可以在doc上下功夫,比如用代码标注方法,标注类,使用代码添加注释。另外配置文件的方式,可以通过中间服务,达成多人开发的效果,这些是我以后想做的。不过现在还是希望有朋友给我提交几个issues,完善现在的代码

  https://github.com/294678380/Ting.js_server_demo/issues

资源

gethub:  https://github.com/294678380/Ting.js

API:  http://www.tingjs.top/api

一个demo的github: https://github.com/294678380/Ting.js_server_demo

【nodejs之我的开源module】 使用express搭建web服务器,代码即文档的实现。的更多相关文章

  1. express搭建web服务器、路由、get、post请求、multer上传文件、EJS模板引擎的使用

    express官网 postman工具下载地址  multer的npm文档地址 express模板引擎怎么使用  地址:http://www.expressjs.com.cn/guide/using- ...

  2. 使用express创建web服务器

    使用express创建web服务器 laiqun@msn.cn Contents 1. 简单的express服务器 2. 静态文件服务 3. 路由 4. 中间件 1. 简单的express服务器 安装 ...

  3. 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库

    小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...

  4. [NodeJs] 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库

    小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...

  5. nodejs搭建web服务器初级

    nodejs搭建简单的web服务器 1.1简介 Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快 ...

  6. 巨杉Tech | 使用 SequoiaDB + Docker + Nodejs 搭建 Web 服务器

    容器化技术的出现大大简化了应用开发人员在构建底层基础设施的工作.SequoiaDB 巨杉数据库于3.2.1版本正式推出了 Docker 容器化部署方案,本文将会基于 SequoiaDB 巨杉数据库与N ...

  7. [开源框架推荐]Icepdf:纯java的pdf文档的提取和转换库

    ICEpdf 是一个轻量级的开源 Java 语言的 PDF 类库.通过 ICEpdf 可以用来浏览.内容提取和转换 PDF 文档,而无须一些本地PDF库的支持. 可以用来做什么? 1.从pdf文件中提 ...

  8. nodejs-日常练习记录-使用express搭建static服务器.

    cd C:\wxg\test\node_demo\myapp nvmw use 0.12.1 node static.js var express = require('express'); var ...

  9. Nodejs+Express 搭建 web应用

    简单的记录下关于如何使用nodejs+Express 极速搭建一个web应用. 项目所需,要用到nodejs,那就去学咯.简单的看了下 七天学会NodeJS,Node.js 教程.发现其实好简单的,分 ...

随机推荐

  1. 第2章 系统用户/组管理(2) su和sudo

    本文目录: 2.1 su 2.2 sudo 2.2.1 /etc/sudoers文件 2.2.2 sudo和sudoedit命令 2.1 su 切换用户或以指定用户运行命令. 使用su可以指定运行命令 ...

  2. angular js 和 dajango 标签{{}} 冲突

    问题描述: 如果在django的模板中使用{{ }},不会被angularjs 识别. 解决办法: >1.5 的django中,将需要angularjs解释的{{expression}}放在 v ...

  3. C. Karen and Game

    C. Karen and Game time limit per test 2 seconds memory limit per test 512 megabytes input standard i ...

  4. Django 模型和数据库 总结

    模型和数据库 模型 首先我们在创建一个model的时候,这个类都是继承自 django.db.models.Model, 各种Model Field类型 AutoField,自动增长的IntegerF ...

  5. 玩转spring boot——websocket

    前言 QQ这类即时通讯工具多数是以桌面应用的方式存在.在没有websocket出现之前,如果开发一个网页版的即时通讯应用,则需要定时刷新页面或定时调用ajax请求,这无疑会加大服务器的负载和增加了客户 ...

  6. iOS获取WIFI的IP、子网掩码,以及域名转IP

    获取WIFI需要的头文件: #import "GetCurrentIP.h" #import <ifaddrs.h> #import <arpa/inet.h&g ...

  7. 3.sublime vue 语法高亮插件安装

    默认情况下,Vue.js 的单文件组件(*.vue)在 sublime 编辑器中是不被识别的.若要想高亮显示,需要安装插件 Vue Syntax Hightlight.安装步骤如下:   第一,在 s ...

  8. Object-C知识点 (四) 性能优化

    #pragma mark - 性能优化 1. 行高一定要缓存 缓存行高是解决性能优化的最佳途径(除非刷新频率已经很高了,否则一定要缓存)2. 尽量减少计算,所有需要素材提前计算好3. 控件不要设置圆角 ...

  9. Linux配置LNMP环境(三)配置MySQL

    1.执行代码:cd /usr/local/rsc下载MySQL,我是从搜狐镜像上下载的:http://mirrors.sohu.com/mysql/MySQL-5.5/,我下载的是64位(注意)的,下 ...

  10. JVM入门——运行时数据区

    这张图我相信基本上对JVM有点接触的都应该很熟悉,可以说这是JVM入门的第一课.其中的“堆”和“虚拟机栈(栈)”更是耳熟能详.下面将围绕这张图对JVM的运行时数据区做一个简单介绍. 程序计数器(Pro ...