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 相关文章推荐
JavaScript 对话框和状态栏使用说明
Oct 25 Javascript
JavaScript基础语法让人疑惑的地方小结
May 23 Javascript
网页防止tab键的使用快速解决方法
Nov 07 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
Jun 13 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
Jun 09 Javascript
jquery实现移动端点击图片查看大图特效
Sep 11 Javascript
Node.js 应用跑得更快 10 个技巧
Apr 03 Javascript
设置点击文本框或图片弹出日历控件的实现代码
May 12 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
Nov 30 Javascript
vue路由拦截及页面跳转的设置方法
May 24 Javascript
webpack多入口多出口的实现方法
Aug 17 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
Apr 17 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版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
vue.js父组件使用外部对象的方法示例
2017/04/25 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
Python及PyCharm下载与安装教程
2017/11/18 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
python SocketServer源码深入解读
2019/09/17 Python
python保留小数位的三种实现方法
2020/01/07 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
详解Python多线程下的list
2020/07/03 Python
高职教师岗位职责
2013/12/24 职场文书
公司道歉信范文
2014/01/09 职场文书
感恩节活动方案
2014/01/27 职场文书
婚礼父母答谢词
2015/01/04 职场文书
职代会闭幕词
2015/01/28 职场文书
担保书怎么写 ?
2019/04/22 职场文书