Heim  >  Artikel  >  Web-Frontend  >  Node.js生成HttpStatusCode辅助类发布到npm_基础知识

Node.js生成HttpStatusCode辅助类发布到npm_基础知识

WBOY
WBOYOriginal
2016-05-16 17:37:521555Durchsuche

作为一个好的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
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");

懒人的文章总是代码多余文字,希望代码能说明一切,感谢各位能阅读。

 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn