kopia lustrzana https://github.com/c9/core
124 wiersze
3.8 KiB
JavaScript
124 wiersze
3.8 KiB
JavaScript
define(function(require, exports, module) {
|
|
"use strict";
|
|
|
|
var util = require("util");
|
|
|
|
exports.HttpError = function(message, code) {
|
|
Error.call(this, message);
|
|
//Error.captureStackTrace(this, arguments.callee);
|
|
this.message = message;
|
|
this.code = parseInt(code, 10);
|
|
this.augment = null;
|
|
};
|
|
util.inherits(exports.HttpError, Error);
|
|
|
|
(function() {
|
|
|
|
this.toString = function() {
|
|
return this.message;
|
|
};
|
|
|
|
this.toJSON = function() {
|
|
var json = {
|
|
code: this.code,
|
|
status: this.defaultMessage,
|
|
message: this.message
|
|
};
|
|
var reserved = Object.keys(json);
|
|
|
|
if (this.augment) {
|
|
for (var name in this.augment) {
|
|
if (reserved.indexOf(name) > -1)
|
|
continue;
|
|
json[name] = this.augment[name];
|
|
}
|
|
}
|
|
|
|
reserved.push("augment");
|
|
for (var name in this) {
|
|
if (this.hasOwnProperty(name)) {
|
|
if (reserved.indexOf(name) > -1)
|
|
continue;
|
|
json[name] = this[name];
|
|
}
|
|
}
|
|
return json;
|
|
};
|
|
|
|
}).call(exports.HttpError.prototype);
|
|
|
|
|
|
var statusCodes = {
|
|
400: "Bad Request",
|
|
401: "Unauthorized",
|
|
402: "Payment Required",
|
|
403: "Forbidden",
|
|
404: "Not Found",
|
|
405: "Method Not Allowed",
|
|
406: "Not Acceptable",
|
|
407: "Proxy Authentication Required",
|
|
408: "Request Timeout",
|
|
409: "Conflict",
|
|
410: "Gone",
|
|
411: "Length Required",
|
|
412: "Precondition Failed",
|
|
413: "Request Entity Too Large",
|
|
414: "Request-URI Too Long",
|
|
415: "Unsupported Media Type",
|
|
416: "Requested Range Not Satisfiable",
|
|
417: "Expectation Failed",
|
|
418: "Im a Teapot", // (RFC 2324) http://tools.ietf.org/html/rfc2324
|
|
420: "Enhance Your Calm", // Returned by the Twitter Search and Trends API when the client is being rate limited
|
|
422: "Unprocessable Entity", // (WebDAV) (RFC 4918)
|
|
423: "Locked", // (WebDAV) (RFC 4918)
|
|
424: "Failed Dependency", // (WebDAV) (RFC 4918)
|
|
425: "Unordered Collection", // (RFC 3648)
|
|
426: "Upgrade Required", // (RFC 2817)
|
|
428: "Precondition Required",
|
|
429: "Too Many Requests", // Used for rate limiting
|
|
431: "Request Header Fields Too Large",
|
|
444: "No Response", // An nginx HTTP server extension. The server returns no information to the client and closes the connection (useful as a deterrent for malware).
|
|
449: "Retry With", // A Microsoft extension. The request should be retried after performing the appropriate action.
|
|
450: "Blocked By Windows Parental Controls",
|
|
499: "Client Closed Request",
|
|
500: "Internal Server Error",
|
|
501: "Not Implemented",
|
|
502: "Bad Gateway",
|
|
503: "Service Unavailable",
|
|
504: "Gateway Timeout",
|
|
505: "HTTP Version Not Supported",
|
|
506: "Variant Also Negotiates",
|
|
507: "Insufficient Storage",
|
|
508: "Loop Detected",
|
|
509: "Bandwidth Limit Exceeded",
|
|
510: "Not Extended",
|
|
511: "Network Authentication Required"
|
|
};
|
|
|
|
for (var status in statusCodes) {
|
|
var defaultMsg = statusCodes[status];
|
|
|
|
var error = (function(defaultMsg, status) {
|
|
return function(msg) {
|
|
this.defaultMessage = defaultMsg;
|
|
exports.HttpError.call(this, msg || status + ": " + defaultMsg, status);
|
|
|
|
if (status >= 500)
|
|
Error.captureStackTrace(this, arguments.callee);
|
|
};
|
|
})(defaultMsg, status);
|
|
|
|
util.inherits(error, exports.HttpError);
|
|
|
|
var className = toCamelCase(defaultMsg);
|
|
exports[className] = error;
|
|
exports[status] = error;
|
|
}
|
|
|
|
function toCamelCase(str) {
|
|
return str.toLowerCase().replace(/(?:(^.)|(\s+.))/g, function(match) {
|
|
return match.charAt(match.length-1).toUpperCase();
|
|
});
|
|
}
|
|
|
|
}); |