2014-01-30 2 views
0

나는 sails.js를 사용합니다. 바우트의 범위 var 및 수명을 돛 contoller로 선언했는지 궁금합니다. 범위 var 및 수명을 돛 컨트롤러 컨트롤러 nodejs

var user = {}; 

module.exports = { 
    index: function (req, res) { 
    user.connected = false; 

    return res.view({ 
     user: user 
    }); 
    }, 

    member: function (req, res) { 
    user.connected = true; 

    return res.view('home/index', { 
     user: user 
    }); 

    } 
}; 

는 처음에 나는 단지 member 기능에 user을 설정하려고하지만 난/회원 웹 페이지를 방문하면, 사용자는 user.connected=true로 초기화하고 있었고, 난이/인덱스 페이지를 방문했을 때 그것은 여전히 ​​연결되었다. 그래서 user.connected=falseindex 함수에 추가했는데 예상대로 작동합니다.

그러나 나는 전혀 이해하지 못합니다. 내가 알고있는 바에 따르면 userHomeController.js 스크립트에 대한 로컬 변수이므로 파일을로드 할 때마다 파기해야하며 각 호출시 {}으로 재설정해야합니다. 내가 질문을 썼다

사실, 내가 뭔가에 대해 생각 ...

을 나는 HomeController.js에서 수행되지 않은 module.exports, 기능 지수와 회원이 메모리와 전화로로드를 사용하기 때문에 그러나 module.exports 전역 객체에 있고 user이 객체이기 때문에 "포인터"가 참조하며 사본은 아니지만 각 함수 안에 참조가 있으므로 참조를 사용하는 곳마다 변경됩니다 . 이것은 모듈 내부의 글로벌 객체와 같습니다.

맞습니까? 내가 뭐 놓친 거 없니? 그것에 대해 더 자세히 설명해 주시겠습니까? 감사.

답변

1

저는 돛에 익숙하지 않지만, 모든 요청이 해당 모듈 변수에 사용자를 기록 할 것이므로 동시 요청을 처리 할 때 모든 혼란을 겪을 것입니다. 요청 기간 동안 변수를 유지하는 표준 방법은 요청 객체에 추가하는 것입니다.

module.exports = { 
    index: function (req, res) { 
     if (!req.user) { 
      // You'll probably have resolved a user and appended it to req in an 
      // Earlier middleware. 
      req.user = {}; 
     } 

     user.connected = false; 

     res.view({ user: req.user }); 
    }, 

    member: function (req, res) { 
     if (!req.user) { 
      req.user = {}; 
     } 

     user.connected = true; 

     res.view('home/index', { user: req.user }); 
    } 
}; 
+0

호 사실,이 코드는 실제로 임시라는 것을 알고 있습니다. 디자이너는 데이터베이스에 신경 쓰지 않고도 몇 가지 변수가 있습니다! 보기를 만드는 것은 단지 가짜 데이터 일 뿐이며 실제 데이터는 뒤를 따릅니다. 가짜 데이터를 만들었을 때 사용자 var의 수명과 범위에 대해 궁금해했습니다. 예상 한대로 작동하지 않았기 때문입니다. – Vadorequest