Node.js生成HttpStatusCode辅助类发布到npm


Posted in Javascript onApril 09, 2013

作为一个好的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

最终生成类为:

View Code 
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");

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

 

Javascript 相关文章推荐
几种延迟加载JS代码的方法加快网页的访问速度
Oct 12 Javascript
js 距离某一时间点时间是多少实现代码
Oct 14 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
Oct 01 Javascript
基于OL2实现百度地图ABCD marker的效果
Oct 01 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
May 18 Javascript
Bootstrap3学习笔记(三)之表格
May 20 Javascript
JavaScript重定向URL参数的两种方法小结
Oct 19 Javascript
JS面向对象的程序设计相关知识小结
May 26 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
Dec 09 Javascript
BootStrap前端框架使用方法详解
Feb 26 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 jQuery
用JS写一个发布订阅模式
Nov 07 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
Apr 08 #Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
Apr 08 #Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
Apr 08 #Javascript
Struts2的s:radio标签使用及用jquery添加change事件
Apr 08 #Javascript
Jquery图片滚动与幻灯片的实例代码
Apr 08 #Javascript
Js动态添加复选框Checkbox的实例方法
Apr 08 #Javascript
JS解决url传值出现中文乱码的另类办法
Apr 08 #Javascript
You might like
PHP利用header跳转失效的解决方法
2014/10/24 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
详解Python之unittest单元测试代码
2018/01/24 Python
pytorch实现线性拟合方式
2020/01/15 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
房务中心文员岗位职责
2014/04/16 职场文书
争先创优心得体会
2014/09/12 职场文书
高中运动会广播稿
2014/09/16 职场文书
硕士学位论文评语
2014/12/31 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL