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 相关文章推荐
破除网页鼠标右键被禁用的绝招大全
Dec 27 Javascript
createElement动态创建HTML对象脚本代码
Nov 24 Javascript
javascript几个易错点记录
Nov 26 Javascript
jQuery中DOM树操作之复制元素的方法
Jan 23 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
Jul 31 Javascript
js实现登录验证码
Dec 22 Javascript
js实现将json数组显示前台table中
Jan 10 Javascript
jQuery length 和 size()区别总结
Apr 26 jQuery
jQuery中each遍历的三种方法实例分析
Sep 07 jQuery
Vue源码学习之关于对Array的数据侦听实现
Apr 23 Javascript
微信小程序 checkbox使用实例解析
Sep 09 Javascript
layui内置模块layim发送图片添加加载动画的方法
Sep 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
图书管理程序(三)
2006/10/09 PHP
php 空格,换行,跳格使用说明
2009/12/18 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
JavaScript 继承使用分析
2011/05/12 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python自定义异常实例详解
2017/07/11 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
Keras loss函数剖析
2020/07/06 Python
类的核心特性有哪些
2014/01/01 面试题
优质的学校老师推荐信
2013/10/28 职场文书
教师演讲稿范文
2014/01/08 职场文书
护士在校生自荐信
2014/02/01 职场文书
财务出纳岗位职责
2014/02/03 职场文书
商超业务员岗位职责
2014/03/12 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL