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 相关文章推荐
JavaScript静态的动态
Sep 18 Javascript
JavaScript中的Location地址对象
Jan 16 Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
Dec 19 Javascript
Javascript 获取链接(url)参数的方法
Feb 15 Javascript
中文路径导致unitpngfix.js不正常的解决方法
Jun 26 Javascript
jQuery中.live()方法的用法深入解析
Dec 30 Javascript
js时间日期格式化封装函数
Dec 02 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
Mar 03 Javascript
使用jQuery UI库开发Web界面的简单入门指引
Apr 22 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
Jun 13 Javascript
vue.js打包之后可能会遇到的坑!
Jun 03 Javascript
Vue SPA单页应用首屏优化实践
Jun 28 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与Java进行通信的实现方法
2013/10/21 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
python操作mysql数据库
2017/03/05 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
python实现字符串和数字拼接
2020/03/02 Python
某科技软件测试面试题
2013/05/19 面试题
一套中级Java程序员笔试题
2015/01/14 面试题
法学专业本科生自荐信范文
2013/12/17 职场文书
优秀毕业生自我鉴定
2014/01/19 职场文书
个人职业及收入证明
2014/10/13 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技