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+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
Dec 11 Javascript
JavaScript中split() 使用方法汇总
Apr 17 Javascript
javascript基础知识分享之类与函数化
Feb 13 Javascript
Javascript简写条件语句(推荐)
Jun 12 Javascript
jQuery实现可拖拽3D万花筒旋转特效
Jan 03 Javascript
vue-hook-form使用详解
Apr 07 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
Jul 24 Javascript
react native实现往服务器上传网络图片的实例
Aug 07 Javascript
javascript获取select值的方法完整实例
Jun 20 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
Sep 21 Javascript
React实现todolist功能
Dec 28 Javascript
梳理一下vue中的生命周期
Dec 30 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
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
php 调用远程url的六种方法小结
2009/11/02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
Swiper自定义分页器使用详解
2017/12/28 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
大学生求职简历的自我评价范文
2013/10/12 职场文书
技术人员面试提纲
2013/11/28 职场文书
《木笛》教学反思
2014/03/01 职场文书
《风筝》教学反思
2014/04/10 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
殡葬服务心得体会
2014/09/11 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
自信主题班会
2015/08/14 职场文书
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS