2016년 9월 6일 화요일

web development with node and express 셋째날

10장 미들웨어

미들웨어(개념적) 애플리케이션에 대한 HTTP요청에서 동작하는 기능을 캡슐화 하는방법
현실적으로 말하면 3가지 매개변수를 받는 함수 요청, 응답,next

에러,요청,응답,넥스트

194페이지 까지 읽어봤는데

예상과는 다르다는걸 느꼈다.  읽을수록 자바스크립트 문법에대해 내가 모르는게 많다는걸 느낀다.

객체지향 자바스크립트의 원리
javascript patterns

빠른 시일 내에 이 두 권의 책을 읽어봐야겠다.


5장의 hood-river 테스트 쪽에서 자꾸 Fatal unspecified error 가 나서

직접 테스트를 해보았다.

브라우저에 직접 해당주소를 넣고 엔터를 때리고나서 링크를 손수 클릭해주니

hidden field에 정확히 원하는 값이 들어가있다.

그런데 왜 테스트에서는 정의하지 않은 에러가 나올까?

그래서 console.log(browser.field('referrer'))로 해당 테스트스윗? 에다가 찍어봤더니...

     { _childNodes: { '0': [Object], '1': [Object] },
     _ownerDocument: [Circular],
     _attributes:
      { _ownerDocument: '#document',
        _parentNode: [Circular],
        _readonly: false,
        '_$ns_to_attrs': {},
        '_$name_to_attrs': {},
        length: 0 },
     _nodeName: '#document',
     _childrenList: null,
     _version: 341,
     _nodeValue: null,
     _parentNode: null,
     _memoizedQueries: { '2': [Object], '11': [Object], '12': [Object] },
     _readonly: false,
     _tagName: '#document',
     _contentType: 'text/html',
     _doctype:
      { _childNodes: {},
        _ownerDocument: [Circular],
        _attributes: [Object],
        _nodeName: 'html',
        _childrenList: null,
        _version: 0,
        _nodeValue: null,
        _parentNode: [Circular],
        _memoizedQueries: {},
        _readonly: false,
        _name: 'html',
        _tagName: 'html',
        _entities: [Object],
        _notations: [Object],
        _publicId: '',
        _systemId: '',
        _fullDT: '<!doctype html>',
        toString: [Function] },
     _implementation: { _ownerDocument: undefined, _features: [Object] },
     _documentElement:
      { _ownerDocument: [Circular],
        _childNodes: [Object],
        _attributes: [Object],
        _nodeName: 'html',
        _childrenList: null,
        _version: 12,
        _nodeValue: null,
        _parentNode: [Circular],
        _memoizedQueries: {},
        _readonly: false,
        _tagName: 'html',
        _namespaceURI: 'http://www.w3.org/1999/xhtml',
        _created: true,
        _localName: 'html',
        _attached: true,
        _attachedToDocument: true,
        _style: [Object],
        _ignoreValueOfStyleAttr: false },
     _ids: { fieldName: [Object] },
     _attached: true,
     _referrer: 'http://localhost:3000/tours/hood-river',
     _cookie: undefined,
     _cookieDomain: '127.0.0.1',
     _URL: '/',
     _documentRoot: '/',
     _queue: { paused: false, tail: [Object] },
     readyState: 'complete',
     _listeners: { load: [Object], DOMContentLoaded: [Object] },
     _styleSheets:
      { '0': [Object],
        '1': [Object],
        '2': [Object],
        '3': [Object],
        '4': [Object],
        '5': [Object],
        '6': [Object],
        _length: 7 },
     _localStorage: { _area: [Object] },
     _sessionStorage: { _area: [Object] },
     _html5shiv: 1,
     _nwmatcher:
      { ACCEPT_NODE: 'r[r.length]=c[k];if(f&&false===f(c[k]))break main;else continue main;',
        byId: [Function],
        match: [Function],
        first: [Function],
        select: [Function],
        compile: [Function],
        contains: [Function],
        configure: [Function],
        getAttribute: [Function],
        hasAttribute: [Function],
        setCache: [Function],
        shortcuts: [Function],
        loadResults: [Function],
        saveResults: [Function],
        emit: [Function],
        Config: [Object],
        Snapshot: [Object],
        Operators: [Object],
        Selectors: {},
        Version: 'nwmatcher-1.3.8',
        registerOperator: [Function],
        registerSelector: [Function] } },
  _childNodes: {},
  _attributes:
   { '0':
      { _childNodes: [Object],
        _ownerDocument: [Object],
        _attributes: [Object],
        _nodeName: 'type',
        _childrenList: null,
        _version: 1,
        _nodeValue: '',
        _parentNode: [Circular],
        _memoizedQueries: {},
        _readonly: false,
        _name: 'type',
        _specified: true,
        _tagName: 'type',
        _namespaceURI: null,
        _localName: 'type',
        _prefix: null,
        _ownerElement: [Circular],
        _created: true },
     '1':
      { _childNodes: [Object],
        _ownerDocument: [Object],
        _attributes: [Object],
        _nodeName: 'name',
        _childrenList: null,
        _version: 1,
        _nodeValue: 'referrer',
        _parentNode: [Circular],
        _memoizedQueries: {},
        _readonly: false,
        _name: 'name',
        _specified: true,
        _tagName: 'name',
        _namespaceURI: null,
        _localName: 'name',
        _prefix: null,
        _ownerElement: [Circular],
        _created: true },
     _ownerDocument:
      { _childNodes: [Object],
        _ownerDocument: [Circular],
        _attributes: [Object],
        _nodeName: '#document',
        _childrenList: null,
        _version: 341,
        _nodeValue: null,
        _parentNode: null,
        _memoizedQueries: [Object],
        _readonly: false,
        _tagName: '#document',
        _contentType: 'text/html',
        _doctype: [Object],
        _implementation: [Object],
        _documentElement: [Object],
        _ids: [Object],
        _attached: true,
        _referrer: 'http://localhost:3000/tours/hood-river',
        _cookie: undefined,
        _cookieDomain: '127.0.0.1',
        _URL: '/',
        _documentRoot: '/',
        _queue: [Object],
        readyState: 'complete',
        _listeners: [Object],
        _styleSheets: [Object],
        _localStorage: [Object],
        _sessionStorage: [Object],
        _html5shiv: 1,
        _nwmatcher: [Object] },
     _parentNode: [Circular],
     _readonly: false,
     '_$ns_to_attrs': { null: [Object] },
     '_$name_to_attrs': { type: [Object], name: [Object] },
     length: 2,
     type:
      { _childNodes: [Object],
        _ownerDocument: [Object],
        _attributes: [Object],
        _nodeName: 'type',
        _childrenList: null,
        _version: 1,
        _nodeValue: '',
        _parentNode: [Circular],
        _memoizedQueries: {},
        _readonly: false,
        _name: 'type',
        _specified: true,
        _tagName: 'type',
        _namespaceURI: null,
        _localName: 'type',
        _prefix: null,
        _ownerElement: [Circular],
        _created: true },
     name:
      { _childNodes: [Object],
        _ownerDocument: [Object],
        _attributes: [Object],
        _nodeName: 'name',
        _childrenList: null,
        _version: 1,
        _nodeValue: 'referrer',
        _parentNode: [Circular],
        _memoizedQueries: {},
        _readonly: false,
        _name: 'name',
        _specified: true,
        _tagName: 'name',
        _namespaceURI: null,
        _localName: 'name',
        _prefix: null,
        _ownerElement: [Circular],
        _created: true } },
  _nodeName: 'input',
  _childrenList: null,
  _version: 2,
  _nodeValue: null,
  _parentNode:
   { _ownerDocument:
      { _childNodes: [Object],
        _ownerDocument: [Circular],
        _attributes: [Object],
        _nodeName: '#document',
        _childrenList: null,
        _version: 341,
        _nodeValue: null,
        _parentNode: null,
        _memoizedQueries: [Object],
        _readonly: false,
        _tagName: '#document',
        _contentType: 'text/html',
        _doctype: [Object],
        _implementation: [Object],
        _documentElement: [Object],
        _ids: [Object],
        _attached: true,
        _referrer: 'http://localhost:3000/tours/hood-river',
        _cookie: undefined,
        _cookieDomain: '127.0.0.1',
        _URL: '/',
        _documentRoot: '/',
        _queue: [Object],
        readyState: 'complete',
        _listeners: [Object],
        _styleSheets: [Object],
        _localStorage: [Object],
        _sessionStorage: [Object],
        _html5shiv: 1,
        _nwmatcher: [Object] },
     _childNodes:
      { '0': [Object],
        '1': [Circular],
        '2': [Object],
        '3': [Object],
        '4': [Object],
        '5': [Object],
        '6': [Object],
        '7': [Object],
        '8': [Object],
        '9': [Object],
        '10': [Object],
        '11': [Object],
        '12': [Object],
        '13': [Object],
        '14': [Object],
        '15': [Object],
        '16': [Object] },
     _attributes:
      { _ownerDocument: [Object],
        _parentNode: [Circular],
        _readonly: false,
        '_$ns_to_attrs': {},
        '_$name_to_attrs': {},
        length: 0 },
     _nodeName: 'form',
     _childrenList: null,
     _version: 17,
     _nodeValue: null,
     _parentNode:
      { _ownerDocument: [Object],
        _childNodes: [Object],
        _attributes: [Object],
        _nodeName: 'div',
        _childrenList: null,
        _version: 16,
        _nodeValue: null,
        _parentNode: [Object],
        _memoizedQueries: {},
        _readonly: false,
        _tagName: 'div',
        _namespaceURI: 'http://www.w3.org/1999/xhtml',
        _created: true,
        _localName: 'div',
        _attached: true,
        _attachedToDocument: true },
     _memoizedQueries: {},
     _readonly: false,
     _tagName: 'form',
     _namespaceURI: 'http://www.w3.org/1999/xhtml',
     _created: true,
     _localName: 'form',
     _attached: true,
     _attachedToDocument: true },
  _memoizedQueries: {},
  _readonly: false,
  _tagName: 'input',
  _namespaceURI: 'http://www.w3.org/1999/xhtml',
  _created: true,
  _localName: 'input',
  _attached: true,
  _attachedToDocument: true }

객체 하나 던져주시는데  documentElement밑에 _refferrer에 해당 내용이 있다

그런데 이걸 어찌꺼내야 하는지...

zombie 버전이 다른탓인지 문법이 다르다 한참을 고생해도 뭔가 해결책이 안나온다.

197페이지는 그대로 따라하면 missing semicolon 이라는 경고가 나오면서 무한루프에 들어간다

;;;;

고난이다.

댓글 없음: