HttpResponse.js
136 lines
| 5.0 KiB
| application/javascript
|
JavascriptLexer
|
|
r0 | define([ "dojo/_base/declare", "dojo/_base/lang", "implab/safe" ,"./ContentType", "./BaseResponse", "./Cookie" ], function(declare, lang,safe, ContentType, BaseResponse, Cookie) { | |
| return declare(BaseResponse, { | |||
| statusCode : 0, | |||
| _headers : null, | |||
| content : null, | |||
| _contentType : null, | |||
| _cookies : null, | |||
| getContentType : function() { | |||
| return this._contentType; | |||
| }, | |||
| setContentType : function(value) { | |||
| if (value) { | |||
| this._contentType = value instanceof ContentType ? value : ContentType.parse(value.toString()); | |||
| this._headers["Content-Type"] = this._contentType.toString(); | |||
| } else { | |||
| this._contentType = null; | |||
| delete this._headers["Content-Type"]; | |||
| } | |||
| this._headers["Content-Type"] = value ? value.toString() : value; | |||
| }, | |||
| /** | |||
| * Записывает cookies | |||
| * @cookie {String|Cookie} печенька или имя печеньки или печенька сохраненная в строку. | |||
| * @value? {*} если {cookie} строка с именем, то в этом параметре передается значение. | |||
| * @options? {Object} если {cookie} строка с именем, то в этом параметре передаются дополнительные свойства печенек. | |||
| */ | |||
| setCookie : function(cookie /*, value, options*/) { | |||
| if (arguments.length == 1) { | |||
| if (safe.isString(cookie)) | |||
| cookie = Cookie.parse(cookie); | |||
| safe.argumentOfType(cookie, Cookie, "cookie"); | |||
| this._cookies[cookie.name] = cookie; | |||
| } else { | |||
| safe.argumentNotEmptyString(cookie,"cookie"); | |||
| let value = arguments[1]; | |||
| let options = arguments[2]; | |||
| let cc = new Cookie(cookie,value,options); | |||
| this._cookies[cc.name] = cc; | |||
| } | |||
| }, | |||
| _setCookies : function(cookies) { | |||
| if (!(cookies instanceof Array)) | |||
| cookies = [cookies]; | |||
| let me = this; | |||
| cookies.forEach(function(cookie){ | |||
| me.setCookie(cookie); | |||
| }); | |||
| }, | |||
| forgetCookie : function(name) { | |||
| this.setCookie(new Cookie(name,"__erased__", { maxAge : 0 })); | |||
| }, | |||
| setHeader : function(name, value) { | |||
| if (!name) | |||
| throw "A name is requried"; | |||
| name = this._normalizeHeaderName(name); | |||
| if (name == "Content-Type") | |||
| this.setContentType(value); | |||
| if (name == "Set-Cookie") | |||
| this._setCookies(value); | |||
| else | |||
| this._headers[name] = value; | |||
| }, | |||
| getHeader : function(name) { | |||
| if (!name) | |||
| throw "A name is requried"; | |||
| name = this._normalizeHeaderName(name); | |||
| return this._headers[name]; | |||
| }, | |||
| _normalizeHeaderName : function(name) { | |||
| return name.toLowerCase().replace(/\b\w/g, function(s) { | |||
| return s.toUpperCase(); | |||
| }); | |||
| }, | |||
| constructor : function(content, options) { | |||
| this._headers = {}; | |||
| this._cookies = {}; | |||
| this.content = content; | |||
| this.statusCode = content ? 200 : 203; | |||
| if (options) { | |||
| if ("statusCode" in options) | |||
| this.statusCode = options.statusCode; | |||
| if ("headers" in options) { | |||
| for ( let header in options.headers) | |||
| this.setHeader(header, options.headers[header]); | |||
| } | |||
| if ("contentType" in options) | |||
| this.setContentType(options.contentType); | |||
| } | |||
| }, | |||
| send : function(serverResponse) { | |||
| if (!serverResponse) | |||
| throw "ServerResponse is required"; | |||
| this.writeHead(serverResponse); | |||
| this.writeEntity(serverResponse); | |||
| serverResponse.end(); | |||
| }, | |||
| writeHead : function(serverResponse) { | |||
| let headers = lang.clone(this._headers); | |||
| let cookies = []; | |||
| for (let key in this._cookies) | |||
| cookies.push(this._cookies[key].toString()); | |||
| headers["Set-Cookie"] = cookies; | |||
| serverResponse.writeHead(this.statusCode, headers); | |||
| }, | |||
| writeEntity : function(serverResponse) { | |||
| if (this.content instanceof Function) { | |||
| this.content(serverResponse); | |||
| } else if (this.content) { | |||
| serverResponse.write(this.content, this._contentType ? this._contentType.parameters.charset : undefined); | |||
| } | |||
| } | |||
| }); | |||
| }); |
