Node.js生成HttpStatusCode辅助类发布到npm

作者:慢半拍时间:2026-10-27 09:02:53浏览:569

本文介绍如何基于Node.js和Express开发环境,通过解析MSDN文档自动生成HttpStatusCode枚举辅助类。文章详细展示了从C#枚举概念迁移至Node.js的实现过程,包括使用Node.js脚本抓取网页数据、解析HTML表格并生成JavaScript代码的完整步骤。最终生成的库已发布至npm,开发者可通过npm install httpstatuscode直接调用,简化RESTful API开发中状态码的使用。

Node.js生成HttpStatusCode辅助类发布到npm

构建优质的RESTful API不仅要求服务URL具备语义清晰、可读性强、幂等性和正交性,HTTP状态码的选择同样至关重要。恰当的状态码能向调用者传递明确的响应信息,例如200代表成功,201表示资源创建成功,409表示冲突,404表示资源未找到等。在开发基于Node.js、MongoDB和AngularJS的演示项目时,发现Express框架并未提供现成的状态码辅助类。为了避免在代码中大量散落201、404等缺乏语义直观性的数字,决定自行开发辅助类。考虑到效率,借鉴C#中HttpStatusCode枚举的设计思路,并利用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即可安装使用。以下是一个简单的测试示例:

具体测试代码如下:

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");

本文侧重于代码实现,旨在通过代码清晰展示功能,感谢阅读。

 

作者最新文章