利用Node.js为Node.js生成HttpStatusCode辅助类并发布到npm

简介:

      作为一个好的Restfull Api不仅在于service url的语义,可读性,幂等,正交,作为http状态码也很重要,一个好的Http Status Code给使用者一个很好的响应,比如200表示正常成功,201表示创建成功,409冲突,404资源不存在等等。所以在做一个基于node.js+mongodb+angularjs的demo时发现node.js express没有提供相应的辅助类,但是本人不喜欢将201,404这类毫无语言层次语义的东西到处充斥着,所以最后决定自己写一个,但是同时本人也很懒,不喜欢做重复的苦力活,怎么办?那就从我最熟悉的c#中HttpStatusCode枚举中copy出来吧,最后为了简便在mac上所以采用了利用node.js去解析msdn关于httpstatuscode的文档生成node.js的辅助类。

    代码很简单:

 

var http = require('http');

var fs = require('fs');

var $ = require('jquery');

var output = "httpStatusCode/index.js";

(function(){

   

    String.format = function() {

        var s = arguments[0];

        for (var i = 0; i < arguments.length - 1; i++) {

            var reg = new RegExp("\\{" + i + "\\}", "gm");

            s = s.replace(reg, arguments[i + 1]);

        }


 

        return s;

    };


 

    var options = {

        host:'msdn.microsoft.com',

        port:80,

        path:'/zh-cn/library/system.net.httpstatuscode.aspx'

    };


 

    http.get(options,function (response) {

        var html = "";

        response.on("data",function (chunk) {

            html += chunk;

        }).on("end", function () {

            handler(html);

        }).on('error', function (e) {

            console.log("Got error: " + e.message);

        });


 

    function getHttpStatusCode(htmlString) {

        var $doc = $(html);

        var rows = $doc.find("table#memberList tr:gt(0)");

        var status = {};

        rows.each(function(i,row){

            status[$(row).find("td:eq(1)").text()] =

                parseInt($(row).find("td:eq(2)").text().match(/\d+/).toString());

        });

       return status;

    };

    

    function generateCode(status){

       var code = "";

       code += "exports.httpStatusCode = " + JSON.stringify(status) + ";";

       return code;

    };

   

    function writeFile(code){

        fs.writeFile(output, code, function(err) {

            if(err) {

                console.log(err);

            } else {

                console.log("The file was saved " + output + "!");

            }

        });

    };


 

    function handler(html){

       var status = getHttpStatusCode(html);

       var code = generateCode(status);

       writeFile(code);

    };


 

  });

})();

代码寄宿在github:https://github.com/greengerong/node-httpstatuscode

最终生成类为:

exports.httpStatusCode = { 
    "Continue": 100, 
    "SwitchingProtocols": 101, 
    "OK": 200, 
    "Created": 201, 
    "Accepted": 202, 
    "NonAuthoritativeInformation": 203, 
    "NoContent": 204, 
    "ResetContent": 205, 
    "PartialContent": 206, 
    "MultipleChoices": 300, 
    "Ambiguous": 300, 
    "MovedPermanently": 301, 
    "Moved": 301, 
    "Found": 302, 
    "Redirect": 302, 
    "SeeOther": 303, 
    "RedirectMethod": 303, 
    "NotModified": 304, 
    "UseProxy": 305, 
    "Unused": 306, 
    "TemporaryRedirect": 307, 
    "RedirectKeepVerb": 307, 
    "BadRequest": 400, 
    "Unauthorized": 401, 
    "PaymentRequired": 402, 
    "Forbidden": 403, 
    "NotFound": 404, 
    "MethodNotAllowed": 405, 
    "NotAcceptable": 406, 
    "ProxyAuthenticationRequired": 407, 
    "RequestTimeout": 408, 
    "Conflict": 409, 
    "Gone": 410, 
    "LengthRequired": 411, 
    "PreconditionFailed": 412, 
    "RequestEntityTooLarge": 413, 
    "RequestUriTooLong": 414, 
    "UnsupportedMediaType": 415, 
    "RequestedRangeNotSatisfiable": 416, 
    "ExpectationFailed": 417, 
    "UpgradeRequired": 426, 
    "InternalServerError": 500, 
    "NotImplemented": 501, 
    "BadGateway": 502, 
    "ServiceUnavailable": 503, 
    "GatewayTimeout": 504, 
    "HttpVersionNotSupported": 505 
};

 

最后考虑到或许还有很多像我一样懒散的人,所以共享此代码发布到了npm,只需要npm install httpstatuscode,便可以简单实用,如下是一个测试demo:

 

var httpStatusCode = require("httpstatuscode").httpStatusCode;


 

var toBeEqual = function (actual,expected){

    if(actual !== expected){

     throw (actual + " not equal " + expected);

    }

};


 

toBeEqual(httpStatusCode.OK,200);

toBeEqual(httpStatusCode.Created,201);

toBeEqual(httpStatusCode.BadRequest,400);

toBeEqual(httpStatusCode.InternalServerError,500);


 

console.log(httpStatusCode);

console.log("success");

懒人的文章总是代码多余文字,我喜欢代码说明一切,感谢各位能阅读此随笔。





 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/1174284,如需转载请自行联系原作者


相关文章
|
2月前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
7月前
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
654 9
|
7月前
|
JavaScript 算法 前端开发
nodejs18版本 npm run dev失败
在使用若依框架运行 `npm run dev` 时,若卡在 95% 并报错,通常是 Node.js 17+ 与 Webpack 的兼容性问题。原因是 OpenSSL 3 的加密算法变化导致依赖冲突。解决方法:Windows 下运行 `set NODE_OPTIONS=--openssl-legacy-provider`,macOS/Linux 使用 `export NODE_OPTIONS=--openssl-legacy-provider`,然后重新启动开发服务即可。此设置让 Node.js 启用旧版加密支持,恢复正常构建流程。
691 0
|
11月前
|
JavaScript
node环境之Error: Cannot find module ‘chalk’ 报错无法解决的问题—-网上说让你npm install chalk 基本是没有用的-优雅草央千澈解决方案
node环境之Error: Cannot find module ‘chalk’ 报错无法解决的问题—-网上说让你npm install chalk 基本是没有用的-优雅草央千澈解决方案
755 13
node环境之Error: Cannot find module ‘chalk’ 报错无法解决的问题—-网上说让你npm install chalk 基本是没有用的-优雅草央千澈解决方案
|
10月前
|
JavaScript
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
1572 27
|
10月前
node环境之当我们遇到需要付费的依赖库@fortawesome/fontawesome-pro导致npm install无法进行怎么办-fontawesome-pro依赖库
node环境之当我们遇到需要付费的依赖库@fortawesome/fontawesome-pro导致npm install无法进行怎么办-fontawesome-pro依赖库
268 3
node环境之当我们遇到需要付费的依赖库@fortawesome/fontawesome-pro导致npm install无法进行怎么办-fontawesome-pro依赖库
|
10月前
|
存储 资源调度 JavaScript
npm、cnpm 和 pnpm 是三种常用的 Node.js 包管理工具
npm、cnpm 和 pnpm 是三种常用的 Node.js 包管理工具。npm 是官方默认的包管理器,提供依赖管理、安装和更新等功能;cnpm 是由阿里巴巴开发的 npm 镜像,专为中国大陆用户优化,解决下载速度慢的问题;pnpm 通过硬链接技术提高安装速度并节省磁盘空间,特别适合磁盘资源紧张的环境。三者命令类似,但各有特色,开发者可根据需求选择合适的工具。
1036 5
|
4月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
1036 11
|
9月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。