利用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的辅助类。

    代码很简单:

  1 var http = require('http');
  2
  3 var fs = require('fs');
  4
  5 var $ = require('jquery');
  6
  7 var output = "httpStatusCode/index.js";
  8
  9 (function(){
 10
 11
 12
 13     String.format = function() {
 14
 15         var s = arguments[0];
 16
 17         for (var i = 0; i < arguments.length - 1; i++) {
 18
 19             var reg = new RegExp("\\{" + i + "\\}", "gm");
 20
 21             s = s.replace(reg, arguments[i + 1]);
 22
 23         }
 24
 25         return s;
 26
 27     };
 28
 29
 30
 31
 32     var options = {
 33
 34         host:'msdn.microsoft.com',
 35
 36         port:80,
 37
 38         path:'/zh-cn/library/system.net.httpstatuscode.aspx'
 39
 40     };
 41
 42
 43
 44
 45     http.get(options,function (response) {
 46
 47         var html = "";
 48
 49         response.on("data",function (chunk) {
 50
 51             html += chunk;
 52
 53         }).on("end", function () {
 54
 55             handler(html);
 56
 57         }).on('error', function (e) {
 58
 59             console.log("Got error: " + e.message);
 60
 61         });
 62
 63
 64
 65
 66     function getHttpStatusCode(htmlString) {
 67
 68         var $doc = $(html);
 69
 70         var rows = $doc.find("table#memberList tr:gt(0)");
 71
 72         var status = {};
 73
 74         rows.each(function(i,row){
 75
 76             status[$(row).find("td:eq(1)").text()] =
 77
 78                 parseInt($(row).find("td:eq(2)").text().match(/\d+/).toString());
 79
 80         });
 81
 82        return status;
 83
 84     };
 85
 86
 87
 88     function generateCode(status){
 89
 90        var code = "";
 91
 92        code += "exports.httpStatusCode = " + JSON.stringify(status) + ";";
 93
 94        return code;
 95
 96     };
 97
 98
 99
100     function writeFile(code){
101
102         fs.writeFile(output, code, function(err) {
103
104             if(err) {
105
106                 console.log(err);
107
108             } else {
109
110                 console.log("The file was saved " + output + "!");
111
112             }
113
114         });
115
116     };
117
118
119
120
121     function handler(html){
122
123        var status = getHttpStatusCode(html);
124
125        var code = generateCode(status);
126
127        writeFile(code);
128
129     };
130
131
132
133
134   });
135
136 })();

 

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

最终生成类为:

 1 exports.httpStatusCode = {
 2     "Continue": 100,
 3     "SwitchingProtocols": 101,
 4     "OK": 200,
 5     "Created": 201,
 6     "Accepted": 202,
 7     "NonAuthoritativeInformation": 203,
 8     "NoContent": 204,
 9     "ResetContent": 205,
10     "PartialContent": 206,
11     "MultipleChoices": 300,
12     "Ambiguous": 300,
13     "MovedPermanently": 301,
14     "Moved": 301,
15     "Found": 302,
16     "Redirect": 302,
17     "SeeOther": 303,
18     "RedirectMethod": 303,
19     "NotModified": 304,
20     "UseProxy": 305,
21     "Unused": 306,
22     "TemporaryRedirect": 307,
23     "RedirectKeepVerb": 307,
24     "BadRequest": 400,
25     "Unauthorized": 401,
26     "PaymentRequired": 402,
27     "Forbidden": 403,
28     "NotFound": 404,
29     "MethodNotAllowed": 405,
30     "NotAcceptable": 406,
31     "ProxyAuthenticationRequired": 407,
32     "RequestTimeout": 408,
33     "Conflict": 409,
34     "Gone": 410,
35     "LengthRequired": 411,
36     "PreconditionFailed": 412,
37     "RequestEntityTooLarge": 413,
38     "RequestUriTooLong": 414,
39     "UnsupportedMediaType": 415,
40     "RequestedRangeNotSatisfiable": 416,
41     "ExpectationFailed": 417,
42     "UpgradeRequired": 426,
43     "InternalServerError": 500,
44     "NotImplemented": 501,
45     "BadGateway": 502,
46     "ServiceUnavailable": 503,
47     "GatewayTimeout": 504,
48     "HttpVersionNotSupported": 505
49 };

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

 1 var httpStatusCode = require("httpstatuscode").httpStatusCode;
 2
 3 var toBeEqual = function (actual,expected){
 4
 5     if(actual !== expected){
 6
 7      throw (actual + " not equal " + expected);
 8
 9     }
10
11 };
12
13 toBeEqual(httpStatusCode.OK,200);
14
15 toBeEqual(httpStatusCode.Created,201);
16
17 toBeEqual(httpStatusCode.BadRequest,400);
18
19 toBeEqual(httpStatusCode.InternalServerError,500);
20
21
22
23
24 console.log(httpStatusCode);
25
26 console.log("success");

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

作者:破  狼 
出处:http://www.cnblogs.com/whitewolf/ 
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-个人独立博客博客园--破狼51CTO--破狼。http://www.cnblogs.com/whitewolf/archive/2013/04/09/3009205.html

时间: 2024-10-02 21:10:28

利用Node.js为Node.js生成HttpStatusCode辅助类并发布到npm的相关文章

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这类毫无语言层次语义的东西到处充斥着,所以最后决定自己写一个,但是同时本

利用q.js实现node 常用api的promise化

这里我们看看怎么用q.js 实现node api的promise. 1.万事开始皆为install npm install q 2.标准node style api 的promise化方法 1.使用Q.nfcall 相对于Q.fcall ,Q.nfcall 就是node 的Q.fcall.    代码如下 复制代码 var FS = require('fs'),     Q   = require('q'),     colors = require('colors'),     file =

「开往春天的 Node.js」 - Node 地下铁第二期线下沙龙总结

前言 寒冬已逝,春之伊始. 3 月 26 日下午,Node 地下铁第 2 次线下沙龙在上海世博展览馆万信酒店举行.本次沙龙邀请了四位在不同领域应用 Node.js 进行探索的大牛,带着我们在温暖的午后,感受 Node.js 的魅力. 虽然当天是近来久违的好天气,而且会场地点有些偏,但这些都没有令同学们对 Node.js 的热情衰减,13 点半签到,很快会议室的位置所剩无几了,在这里,组委会感谢各位同学的支持. 回顾 Node.js 源站的发展与挑战 淘宝首页是淘宝很重要的一个页面,它原本一直运行

Node.js开发者必须了解的4个JS要点_node.js

本文为开发者总结了4个Node.js要点. 1. 非阻塞(Non-blocking)或异步I/O 由于Node.js一个服务器端框架,所以它主要工作之一是处理浏览器请求.在传统的I/O系统中,每个请求的发出都是在上一请求到达之后才发出的.所以这被称为阻塞(blocking)I/O.服务器会阻挡其它的请求以处理当前请求,从而导致浏览器等待. Node.js不以这种方式来进行I/O处理.如果一个请求需要长时间处理,Node.js会把该请求发送给一个事件循环(event loop),然后继续处理在调用

究竟什么是Node.js?Node.js有什么好处?_node.js

Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码. 简介 如果您听说过 Node,或者阅读过一些文章,宣称 Node 是多么多么的棒,那么您可能会想:"Node 究竟是什么东西?" 即便是在参阅 Node 的主页之后,您甚至可能还是 不明白 Node 为何物?Node 肯定不适合每个程序员,但它可能是某些程序员一直苦苦追寻的东西. 为试图解

什么是Node.js?Node.js详细介绍_node.js

简介 如果您听说过 Node,或者阅读过一些文章,宣称 Node 是多么多么的棒,那么您可能会想:"Node 究竟是什么东西?"尽管不是针对所有人的,但 Node 可能是某些人的正确选择. 为试图解释什么是 Node.js,本文探究了它能解决的问题,它如何工作,如何运行一个简单应用程序,最后,Node 何时是和何时不是一个好的解决方案.本文不涉及如何编写一个复杂的 Node 应用程序,也不是一份全面的 Node 教程.阅读本文应该有助于您决定是否应该学习 Node,以便将其用于您的业务

基于Knex.js的Node.js ORM框架 bookshelf

bookshelf 详细介绍 一个基于Knex.js的Node.js ORM框架,支持PostgreSQL,MySQL和SQLite3 简单来说,Bookself是一个优秀的代码库,它易于阅读.理解.可扩展.它不强制你使用任何特定的校验scheme,而是提供灵活有效的关系或嵌套关系加载策略,一级类支持事务.它是一个精益的对象关系映射器(lean Object Relation Mapper),允许你使用原始的knex接口,当你需要自定义查询时,因为它有时并不能完全满足老一套的惯例. Booksh

一行命令搞定node.js 版本升级_node.js

node有一个模块叫n(这名字可够短的...),是专门用来管理node.js的版本的. 首先安装n模块: npm install -g n 第二步: 升级node.js到最新稳定版 n stable 是不是很简单?! n后面也可以跟随版本号比如: n v0.10.26 或 n 0.10.26 就这么简单,这可怎么办??!! 另外分享几个npm的常用命令 npm -v #显示版本,检查npm 是否正确安装. npm install express #安装express模块 npm install

dtree 网页树状菜单及传递对象集合到js内,动态生成节点_javascript技巧

在winform端,树状菜单是非常有用的,实现这个是非常便捷的,所以我想到在页面放入一个树状菜单的.我选择了dtree这个工具,网络上还有很多方法实现页面树状菜单的,不过我觉得这个比较好用的,而且配置比较简单,运用上上手很快.dtree是纯js的,所以不用导入jar包,并且配置只要在js内配置就好了.而且现在网络上有很多高手修改后的改良版,加了checkbox,更加方便.在开发过程中,最难的就是数据的交互的,因为dtree是纯js的,所以不存在和后台交互的方法,我的办法是先通过后台交互,将数据传