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 相关文章推荐
表单项的name命名为submit、reset引起的问题
Dec 22 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
Dec 25 Javascript
jQuery实现可拖动的浮动层完整代码
May 27 Javascript
js为数字添加逗号并格式化数字的代码
Aug 23 Javascript
javascript自定义startWith()和endWith()的两种方法
Nov 11 Javascript
jquery默认校验规则整理
Mar 24 Javascript
jquery如何扑捉回车键触发的事件
Apr 24 Javascript
jQuery操作动态生成的内容的方法
May 28 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
Nov 25 Javascript
vue组件实现文字居中对齐的方法
Aug 23 Javascript
jQuery实现的自定义轮播图功能详解
Dec 28 jQuery
vue完美实现el-table列宽自适应
May 08 Vue.js
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命名空间(Namespace)简明教程
2014/06/11 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
node puppeteer(headless chrome)实现网站登录
2018/05/09 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
Python实现简单的语音识别系统
2017/12/13 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
用Python逐行分析文件方法
2019/01/28 Python
学python安装的软件总结
2019/10/12 Python
Python 项目转化为so文件实例
2019/12/23 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
教你怎样写好自我评价
2013/10/05 职场文书
活动总结怎么写
2014/04/28 职场文书
军事博物馆观后感
2015/06/05 职场文书
教师节班会主持词
2015/07/06 职场文书
办公室规章制度范本
2015/08/04 职场文书
python实现简单的聊天小程序
2021/07/07 Python
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers