##// END OF EJS Templates
Added tag v1.0.0 for changeset 7110eac54b19
Added tag v1.0.0 for changeset 7110eac54b19

File last commit:

r0:7110eac54b19 v1.0.0 default
r1:8b476fada8c1 default
Show More
HttpResponse.js
136 lines | 5.0 KiB | application/javascript | JavascriptLexer
/ src / main / js / HttpResponse.js
cin
initial port of implab/web
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);
}
}
});
});