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 相关文章推荐
验证用户是否修改过页面的数据的实现方法
Sep 26 Javascript
input 高级限制级用法
Mar 26 Javascript
基于JavaScript自定义构造函数的详解说明
Apr 24 Javascript
js获取判断上传文件后缀名的示例代码
Feb 19 Javascript
javascript常见操作汇总
Sep 03 Javascript
Javascript 读取操作Sql中的Xml字段
Oct 09 Javascript
javascript实现tab响应式切换特效
Jan 29 Javascript
有关jquery与DOM节点操作方法和属性记录
Apr 15 Javascript
jquery实现折叠菜单效果【推荐】
Mar 08 Javascript
JavaScript实现两个select下拉框选项左移右移
Mar 09 Javascript
浅谈原型对象的常用开发模式
Jul 22 Javascript
基于jquery实现多选下拉列表
Aug 02 jQuery
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数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
php基础教程 php内置函数实例教程
2012/08/21 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP实现的策略模式示例
2019/03/20 PHP
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
Javascript非构造函数的继承
2015/04/27 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
Vue实现验证码功能
2019/12/03 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
Python判断字符串与大小写转换
2015/06/08 Python
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
Python多线程下载文件的方法
2015/07/10 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
Europcar葡萄牙:葡萄牙汽车和货车租赁
2017/10/13 全球购物
安全生产演讲稿
2014/05/09 职场文书
红头文件任命书范本
2014/06/05 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
2014年服务员工作总结
2014/11/18 职场文书
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js
Nginx实现负载均衡的项目实践
2022/03/18 Servers