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

简介: 前言   都说nodejs适合制作restful_API,因为它有异步处理能力,能吞吐更多的请求,这一点是大家都认可的。前不久我使用nodejs+express+postgresql搭建了一个restful中间处理平台,感觉express的api在代码量多的时候,显得凌乱。

前言

  都说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

======================================================== 转载请注明出处。
目录
相关文章
|
3月前
|
数据采集 Web App开发 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
随着互联网的发展,网页数据抓取已成为数据分析和市场调研的关键手段。Puppeteer是一款由Google开发的无头浏览器工具,可在Node.js环境中模拟用户行为,高效抓取网页数据。本文将介绍如何利用Puppeteer的高级功能,通过设置代理IP、User-Agent和Cookies等技术,实现复杂的Web Scraping任务,并提供示例代码,展示如何使用亿牛云的爬虫代理来提高爬虫的成功率。通过合理配置这些参数,开发者可以有效规避目标网站的反爬机制,提升数据抓取效率。
238 4
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
2月前
|
开发框架 JavaScript 前端开发
使用 Node.js 和 Express 构建 Web 应用
【10月更文挑战第2天】使用 Node.js 和 Express 构建 Web 应用
|
2月前
|
计算机视觉 Python
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
这篇文章是关于如何使用Flask框架结合OpenCV库,通过电脑摄像头实现视频流在网页上的实时显示,并提供了单摄像头和多摄像头的实现方法。
89 2
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
|
24天前
|
缓存 负载均衡 监控
性能优化:Node.js高效服务器开发技巧与最佳实践
【10月更文挑战第29天】在Node.js服务器开发中,性能优化至关重要。本文介绍了几种高效开发的最佳实践,包括使用缓存策略、采用异步编程、实施负载均衡和性能监控。通过示例代码展示了如何实现这些技术,帮助开发者构建更快、更稳定的Node.js应用。
36 2
|
3月前
|
数据采集 存储 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
在现代Web开发中,数据采集尤为重要,尤其在财经领域。本文以“东财股吧”为例,介绍如何使用Puppeteer结合代理IP技术进行高效的数据抓取。Puppeteer是一个强大的Node.js库,支持无头浏览器操作,适用于复杂的数据采集任务。通过设置代理IP、User-Agent及Cookies,可显著提升抓取成功率与效率,并以示例代码展示具体实现过程,为数据分析提供有力支持。
110 2
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
2月前
|
JSON JavaScript 前端开发
使用 Node.js 和 Express 构建 RESTful API 服务器
【10月更文挑战第3天】使用 Node.js 和 Express 构建 RESTful API 服务器
|
2月前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
47 3
|
2月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express框架构建Web服务器
使用Node.js和Express框架构建Web服务器
|
2月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
19 0
|
2月前
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
10月更文挑战第7天
32 0