利用Node.js为Node.js生成HttpStatusCode辅助类并发布到npm-阿里云开发者社区

开发者社区> 技术小胖子> 正文

利用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,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云发布SaaS生态战略,成就亿级营收独角兽
7月26日,在上海举办的阿里云合作伙伴峰会上,阿里云正式发布SaaS生态战略,计划用阿里云的品牌、渠道、资本、方法论、技术加持伙伴,成就亿级营收独角兽。 ​​ 该生态战略计划招募10家一级SaaS合作伙伴,通过SaaS加速器为合作伙伴提供应用开发、集成、上云、售卖的全链路解决方案,提升开发效率和集成效率,缩短商业化的周期,从而成就亿级营收的SaaS独角兽。
5203 0
数字海南加入阿里云原生合作伙伴计划并发布政务服务高可用联合解决方案
政务服务的数字化转型,会遇到诸如移动端应用需要频繁迭代、快速发版、对接数个异构业务系统不稳定的问题。亟需一个政务服务高可用解决方案,来支撑快速接入各个部门已有的业务和服务、快速迭代更新各部门新的业务服务需求,维护保持服务的稳定运行。
3399 0
Json 逆向生成 javaBean
我的开发环境:IDEA+maven+jdk1.8 1.下载idea插件GsonFormat 2. 添加依赖 该插件支持的json序列化工具: 我在这里用阿里的fastJson 依赖,想用gson、jackson的都可以,插件都支持 com.
1312 0
阿里云与Apache Flink商业公司DataArtisans于2017杭州云栖大会达成战略合作并发布
10月12日,Apache Flink商业公司DataArtisans CEO、联合创始人Kostas Tzoumas在云栖大会上宣布和阿里集团达成战略合作伙伴关系,希望能够借助全球最大的云计算公司之一阿里云,服务更多的大数据实时流计算的客户。
4186 0
js之随机生成
js之随机生成
4838 0
成本直降50% | 阿里云发布云原生网关,开启下一代网关新进程
融合流量网关与微服务网关的下一代网关—云原生网关来啦!优势满满!
516 0
Deno 将于 5 月 13 日发布 1.0 版本,Node.js 会逐渐失宠吗?
官方文档介绍,Deno 是一个 JavaScript/TypeScript 运行时,具有安全的默认设置和良好的开发体验。构建在 V8 引擎、Rust 语言和 Tokio 之上。(最初的 Deno 版本是用 Go 语言写就,但在第二版中移除了 Go 转而用 Rust 语言替代,因为后者具有更好的安全性。
2519 0
21119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载