As a good Restfull Api, it is not only about the semantics, readability, power, and orthogonal of service URLs, but also about http Status codes. A good Http Status Code gives users a good response, for example, 200 indicates normal success, 201 indicates successful creation, 409 conflict, and 404 resource does not exist. Therefore, we are working on a node-based architecture. node is found in js + mongodb + angularjs demo. js express does not provide the corresponding auxiliary classes, but I do not like to fill the 201,404 class of things without hierarchical semantics everywhere, so I finally decided to write it myself, but I am also very lazy, what should I do if I do not like repeated hard work? Copy the code from the HttpStatusCode enumeration in c #, which I am most familiar with. In the end, node is used for mac convenience. js parses msdn documentation on httpstatuscode to generate node. js helper class.
The code is simple:
Copy codeThe Code is as follows:
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 );
};
});
})();
Code boarding at github: https://github.com/greengerong/node-httpstatuscode
The final generation class is:
Copy codeThe Code is as follows:
View Code
Exports. httpStatusCode = {
"Continue": 100,
"SwitchingProtocols": 101,
"OK": 200,
"Created": 201,
"Accepted": 202,
"Nonauthoritativeinfo": 203,
"NoContent": 204,
"ResetContent": 205,
"PartialContent": 206,
& Quot; MultipleChoices & quot;: 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
};
Finally, considering that there may be a lot of people who are as lazy as I do, sharing this code to npm can be simple and practical. Here is a test demo:
Copy codeThe Code is as follows:
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 ");
Lazy articles are always redundant texts in the code. I hope the code can describe everything. Thank you for reading this article.