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类(纯JS, Ajax模式)
Mar 12 Javascript
jquery的extend和fn.extend的使用说明
Jan 09 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
Mar 14 Javascript
小结Node.js中非阻塞IO和事件循环
Sep 18 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
Aug 21 Javascript
JavaScript实现标题栏文字轮播效果代码
Oct 24 Javascript
微信小程序 实现拖拽事件监听实例详解
Nov 16 Javascript
Node.js制作简单聊天室
Jan 12 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
Mar 25 Javascript
浅谈Vuex的状态管理(全家桶)
Nov 04 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
Sep 03 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
May 23 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 配置文件中open_basedir选项作用
2009/07/19 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
PHP中exec与system用法区别分析
2014/09/22 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
加拿大留学自荐信
2014/01/28 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
2014年除四害工作总结
2014/12/06 职场文书
2015年安全月活动总结
2015/03/26 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
python中validators库的使用方法详解
2022/09/23 Python