./lib/express.js
function createApplication() {
var app = function(req, res, next) {
// TODO 아직 이해 못함
app.handle(req, res, next);
};
mixin(app, EventEmitter.prototype, false);
mixin(app, proto, false);
/**
*
* proto에서 app에 복사한 프로퍼티
*
* init
* defaultConfiguration
* lazyrouter
* handle
* use
* route
* engine
* param
* set
* path
* enabled
* disabled
* enable
* disable
* acl
* bind
* checkout
* connect
* copy
* delete
* get
* head
* link
* lock
* m-search
* merge
* mkactivity
* mkcalendar
* mkcol
* move
* notify
* options
* patch
* post
* pri
* propfind
* proppatch
* purge
* put
* rebind
* report
* search
* source
* subscribe
* trace
* unbind
* unlink
* unlock
* unsubscribe
* all
* del
* render
* listen
*/
// expose the prototype that will get set on requests
app.request = Object.create(req, {
app: { configurable: true, enumerable: true, writable: true, value: app }
})
// expose the prototype that will get set on responses
app.response = Object.create(res, {
app: { configurable: true, enumerable: true, writable: true, value: app }
})
/**
* Object.create() 메서드는 프로토타입 개체 및 속성(property)을 갖는 새 개체를 만든다.
*
* https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/create 참고
*/
/**
* 첫번째 매개변수 : 새로 만든 개체의 프로토타입이어야 할 객체
*
* 두번째 매개변수 : 설정된 경우 새로 만든 개체에 프로퍼티 설명자(property descriptor)를 추가한다 / Object.defineProperties()의 두 번째 인수에 해당
*/
/**
* writable: true이면 값을 수정할 수 있다.
* enumerable: true이면 반복문을 사용해 나열할 수 있다.
* configurable: true이면 프로퍼티 삭제나 플래그 수정이 가능하다.
*
* 위의 프로퍼티들의 기본값은 false이다.
*
*/
/**
* res 개체가 가지고있는 출력가능한 프로퍼티
*
* header
* get
* accepts
* acceptsEncodings
* acceptsEncoding
* acceptsCharsets
* acceptsCharset
* acceptsLanguages
* acceptsLanguage
* range
* param
* is
* protocol
* secure
* ip
* ips
* subdomains
* path
* hostname
* host
* fresh
* stale
* xhr
*
* app.request 개체가 가지고있는 출력가능한 프로퍼티
*
* app
*
*/
/**
* res 개체가 가지고 있는 출력가능한 프로퍼티
*
* status
* links
* send
* json
* jsonp
* sendStatus
* sendFile
* sendfile
* download
* type
* contentType
* format
* attachment
* append
* header
* set
* get
* clearCookie
* cookie
* location
* redirect
* vary
* render
*
* app.response 개체가 가지고있는 출력가능한 프로퍼티
*
* app
*
*/
/**
* res와 req개채의 프로퍼티중 app프로퍼티는 존재하지 않음
*
* Object.create의 두번쨰 매개변수를 통해 원본 개체에 존재하지 않는 프로퍼티를 추가할수 있는것 같다.
*
*/
/**
* app request 프로퍼티와 response 프로퍼티에 req와 res의 프로토타입 개체 및 속성을 갖는 새 개체를 할당한다.
* 이때 새로 할당하는 개체의 프로퍼티 app의 경우 { configurable: true, enumerable: true, writable: true, value: app }에 해당하는 프로퍼티 플래그를 갖는다.
* 그 이외의 나머지 프로퍼티들의 경우 { configurable: false, enumerable: false, writable: false }가 기본값으로써 설정된다.
* 따라서 나머지 프로퍼티의 경우 수정 삭제 열거가 불가능해진다.
*
* ex) app.response.header === undefined
*/
/**
* new를 사용하지 않은 이유
*
* res, req의 경우 함수가 아닌 개체이므로 new키워드 사용시 에러가 발생한다.
*
*/
app.init();
return app;
}
https://github.com/daeungkim/express/commit/e18ff0686120959901e11e62e229043996ef6095