2015-01-17 2 views
0

서버가 요청을 받으면 라우터를 생성하고 내 라우터에 내 디스패처에게 필요한 컨트롤러를 요청하여 라우터와 모든 경로의 배열로 URL을 보냅니다. . 라우터가 내 디스패처로 컨트롤러를 보내고 디스패처는 컨트롤러를 호출합니다 index() func...nodejs/javascript 변수가 덮어 쓰기

내 컨트롤러는 내 컨트롤러를 초기화 할 때 마지막 컨트롤러가 내 컨트롤러를 덮어 씁니다. 누군가 왜 저에게 말할 수 있습니까?

function Router(){ 
    log(colors.green+"Router initialization...") 
    this.indexController = new (require("../controllers/index"))(); 
    log(this.indexController.constructor.name); 

    this.notFoundController = new (require("../controllers/notFound"))(); 
    log(this.notFoundController.constructor.name); 

    this.publicController = new (require("../controllers/public"))(); 
    log(this.publicController.constructor.name); 

    this.faviconController = new (require("../controllers/favicon"))(); 
    log(this.faviconController.constructor.name); 

    this.registerController = new (require("../controllers/register"))(); 
    log(this.registerController.constructor.name); 
    log(colors.green+"Router initialization successful") 

    log(this.indexController.constructor.name); 
    log(this.notFoundController.constructor.name); 
    log(this.publicController.constructor.name); 
    log(this.faviconController.constructor.name); 
    log(this.registerController.constructor.name); 
} 

콘솔 로그 :

Log(21:9:4): Router initialization... 
Log(21:9:4): IndexController 
Log(21:9:4): NotFoundController 
Log(21:9:4): PublicController 
Log(21:9:4): FaviconController 
Log(21:9:4): RegisterController 
Log(21:9:4): Router initialization successful 
Log(21:9:4): RegisterController 
Log(21:9:4): RegisterController 
Log(21:9:4): RegisterController 
Log(21:9:4): RegisterController 
Log(21:9:4): RegisterController 

왜 내 변수를 덮어 쓰기

이, 내가 문제를 보여주기 위해 로그를 작은 코드를 내 라우터 만든입니까?

register.js : 당신은 RegisterController.protoypeController.prototype를 할당하고 그것을을 수정

function RegisterController() {} 
RegisterController.prototype = Controller.prototype; 
RegisterController.prototype.constructor = RegisterController; 
RegisterController.prototype.index = function(content) { 
    if (content.req.method == "POST") { 
     content.res.writeHeader(200, { 
      "Content-Type": "text/html" 
     }); 
     content.res.write(content.datas); 
     content.res.end(); 
    } else { 
     this.render.call(content, "register"); 
    } 
} 
module.exports = RegisterController; 
+0

당신은 우리에게'컨트롤러/register.js'의 내용을하시기 바랍니다 보여줄 수 : 당신은 볼 것이다

console.log(this.indexController === this.notFoundController); 

? – Bergi

+0

function RegisterController() { } RegisterController.prototype = Controller.prototype; RegisterController.prototype.constructor = RegisterController; RegisterController.prototype.index = 기능 (내용) { \t (content.req.method == "POST") 경우 { \t \t content.res.writeHeader (200, { "Content-Type을": "텍스트/html "}); \t \t content.res.write (content.datas); \t \t content.res.end(); \t} \t else { \t \t this.render.전화 (내용, "등록"); \t} } module.exports = RegisterController; – Banou26

+2

아니요, 아니요, 의견에 코드를 게시하는 대신 질문을 편집하십시오. 오, 그리고 StackOverflow에 오신 것을 환영합니다 :-) – Bergi

답변

0

는 :

RegisterController.prototype = Controller.prototype; 
RegisterController.prototype.constructor = RegisterController; 

이 프로그램의 모든 컨트롤러의 프로토 타입을 수정합니다.

모든 컨트롤러에 대해 .js 개의 파일이이 작업을 수행 중이며 출력의 첫 번째 부분이 인 경우으로 보입니다. 한 번에 하나씩 로깅하기 때문입니다. 결과적으로 결국 출력을 설명 할 것입니다. 왜냐하면 모두 같은 것을 공유하기 때문입니다. constructor. 당신이 무슨 생각에 반하는 보조 노트로서


RegisterController.prototype = Object.create(Controller.prototype); 
은, 코드의 변수는 당신이 우리가 덮어 쓰기되지 않았다 보여 주었다 : 당신이 그것을 수정하기 전에

당신은 프로토 타입의 복사본을 만들 필요가 . 당신이했던 경우이 :

false 
+0

아, 고마워! :디 – Banou26