zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

JSnpmNode 发布 生成 辅助
2023-06-13 09:14:49 时间

作为一个好的RestfullApi不仅在于serviceurl的语义,可读性,幂等,正交,作为http状态码也很重要,一个好的HttpStatusCode给使用者一个很好的响应,比如200表示正常成功,201表示创建成功,409冲突,404资源不存在等等。所以在做一个基于node.js+mongodb+angularjs的demo时发现node.jsexpress没有提供相应的辅助类,但是本人不喜欢将201,404这类毫无语言层次语义的东西到处充斥着,所以最后决定自己写一个,但是同时本人也很懒,不喜欢做重复的苦力活,怎么办?那就从我最熟悉的c#中HttpStatusCode枚举中copy出来吧,最后为了简便在mac上所以采用了利用node.js去解析msdn关于httpstatuscode的文档生成node.js的辅助类。

代码很简单:

复制代码代码如下:


varhttp=require("http");

varfs=require("fs");

var$=require("jquery");

varoutput="httpStatusCode/index.js";

(function(){



String.format=function(){

vars=arguments[0];

for(vari=0;i<arguments.length-1;i++){

varreg=newRegExp("\\{"+i+"\\}","gm");

s=s.replace(reg,arguments[i+1]);

}

returns;

};




varoptions={

host:"msdn.microsoft.com",

port:80,

path:"/zh-cn/library/system.net.httpstatuscode.aspx"

};




http.get(options,function(response){

varhtml="";

response.on("data",function(chunk){

html+=chunk;

}).on("end",function(){

handler(html);

}).on("error",function(e){

console.log("Goterror:"+e.message);

});




functiongetHttpStatusCode(htmlString){

var$doc=$(html);

varrows=$doc.find("table#memberListtr:gt(0)");

varstatus={};

rows.each(function(i,row){

status[$(row).find("td:eq(1)").text()]=

parseInt($(row).find("td:eq(2)").text().match(/\d+/).toString());

});

returnstatus;

};



functiongenerateCode(status){

varcode="";

code+="exports.httpStatusCode="+JSON.stringify(status)+";";

returncode;

};



functionwriteFile(code){

fs.writeFile(output,code,function(err){

if(err){

console.log(err);

}else{

console.log("Thefilewassaved"+output+"!");

}

});

};




functionhandler(html){

varstatus=getHttpStatusCode(html);

varcode=generateCode(status);

writeFile(code);

};




});

})();

代码寄宿在github:https://github.com/greengerong/node-httpstatuscode

最终生成类为:

复制代码代码如下:


ViewCode
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,只需要npminstallhttpstatuscode,便可以简单实用,如下是一个测试demo:

复制代码代码如下:
varhttpStatusCode=require("httpstatuscode").httpStatusCode;

vartoBeEqual=function(actual,expected){

if(actual!==expected){

throw(actual+"notequal"+expected);

}

};

toBeEqual(httpStatusCode.OK,200);

toBeEqual(httpStatusCode.Created,201);

toBeEqual(httpStatusCode.BadRequest,400);

toBeEqual(httpStatusCode.InternalServerError,500);




console.log(httpStatusCode);

console.log("success");

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