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 相关文章推荐
在jQuery中 常用的选择器介绍
Apr 16 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
Oct 15 Javascript
浅谈JavaScript Array对象
Dec 29 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
Jan 12 Javascript
Bootstrap Table使用整理(一)
Jun 09 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
Jun 26 Javascript
Vue中添加手机验证码组件功能操作方法
Dec 07 Javascript
jQuery Dom元素操作技巧
Feb 04 jQuery
zTree 树插件实现全国五级地区点击后加载的示例
Feb 05 Javascript
图文详解vue框架安装步骤
Feb 12 Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 Javascript
5个你不知道的JavaScript字符串处理库(小结)
Jun 01 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程序?
2006/12/08 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
php上传文件常见问题总结
2015/02/03 PHP
PHP安全上传图片的方法
2015/03/21 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
javascript this详细介绍
2016/09/19 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
Python素数检测实例分析
2015/06/15 Python
Python正则表达式知识汇总
2017/09/22 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
python设置值及NaN值处理方法
2018/07/03 Python
Python构建图像分类识别器的方法
2019/01/12 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
主办会计岗位职责
2014/03/13 职场文书
公司节能减排倡议书
2014/05/14 职场文书
2014年教务处工作总结
2014/12/03 职场文书
奖励通知
2015/04/22 职场文书
绿色环保倡议书
2015/04/28 职场文书
荒岛余生观后感
2015/06/09 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
Python实战之OpenCV实现猫脸检测
2021/06/26 Python