2017-12-23 16 views
-1

저는 최근에 개발 팀을 가진 클라이언트를 선택했습니다. 나는 이미 개발 된 웹 사이트에서 일하고 있으며, 나에게 약간 이상한 것들을 실행 중이다.api 서버에서 req 객체 변경 중

나는 루트 핸들링 내에서 요청 객체를 엉망으로 만드는 것이 본질적으로 어려웠지만 (나는 완전히 틀릴 수있다.

다음 코드는 req.query.msg를 변수에 생성하고 ejs 페이지 렌더링을 통해 전달하는 대신 req.query.msg를 할당하는 이유가 확실치 않아 나를 혼란스럽게합니다.

/******************************************************** 
*              * 
* CHANGE PASSWORD ROUTE THAT POSTS THE NEW PASSWORD TO * 
* DATABASE.            * 
*              * 
********************************************************/ 



app.post('/client/password', function (req, res) { 
var url = URLS.ClientChangePW; 

if(req.session.securityquestions[0].SSN !== "null" || req.session.securityquestions[0].SSN !== "undefined"){ 
    if(req.body.pwd !== req.body.pwdconf){ 
    res.redirect('/client/changePassword' + config.PWD_MISMATCH); 
    } else { 
    var ssn = req.session.securityquestions[0].SSN; 
    while(ssn.length < 9){ 
     ssn = "0" + ssn; 
    } 

    url = url.replace("@ssn", ssn); 
    url = url.replace("@newpw", req.body.pwd); 
    } 

    request.put(url, function (err, xres, body) { 

    var data = JSON.parse(body); 


    if(data.status === 200){ 

     email(req.session.securityquestions[0].EMAIL, "none", "forgotpw", function(result){ 

     if(result){ 
      req.query.msg = "Your password has been reset."; 
     } else { 
      req.query.msg = "Request unsuccessful. Please call number here for assistance."; 
     } 
     res.render('pages/login', { 
      session: req.session, 
      msg: req.query.msg 
     }); 
     }); 
    } else { 
     req.query.msg = "Request unsuccessful. Please call number here for assistance."; 
     res.render('pages/login', { 
     session: req.session, 
     msg: req.query.msg 
     }); 
    } 
    }); 
} 
}); 

다시 말하지만, 내가 틀릴 수 있기 때문에 req 객체를 실제로 사용한 적이 없습니다. 나는 항상 클라이언트가 요청을 설정하고이를 사용하여 응답을 보냈다.

+1

이 질문을하기 전에 먼저 급행 의사에게 알려야한다고 생각합니다. http://expressjs.com/en/api.html – digit

+0

req.query가 매개 변수 라우트에서 가져온 것을보고 있습니다 ... 왜 매개 변수 라우트에 문자열을 추가할까요? –

+0

문서가 내 질문과 관련이 있는지 이해하지 못합니다. 왜 우리는 라우트 핸들러 내에서 req.query를 설정해야할까요? –

답변

1

변수를 생성하고 ejs 페이지에서 전달하는 대신 req.query.msg를 할당하는 이유가 확실하지 않습니다.

여기서 req.query.msg 속성에 할당 할 이유가없는 것으로 보입니다. 이것이 내 코드라면 별도의 로컬 변수를 사용하고 싶습니다.

다시 말하지만 req 개체를 잘못 사용해서는 안됩니다. 나는 항상 클라이언트가 요청을 설정하고이를 사용하여 응답을 보냈다. 이 여기에 무슨 일이 일어나고 있는지 아니지만

, 사용하는 라우팅 스택 아래로 더 요청 처리기에 대한 req 개체의 상태를 설정 미들웨어를 사용하는 것이 익스프레스 개발에 일반적입니다. req 개체는 요청을 처리하는 동안 요청 별 상태를 유지하는 표준 개체입니다. 요청에서 하나의 요청 핸들러 함수 만 작동하는 경우 해당 요청 핸들러 함수에서 로컬 변수를 사용할 수 있으므로 req 오브젝트에 상태를 지정할 이유가 없습니다. 그러나 궁극적으로 요청 핸들러에 도달하기 전에 작업을 설정하는 미들웨어를 사용하는 경우 req 객체는 일반적으로 설정 상태가있는 곳입니다. req.session도이 코드에서 사용된다는 것을 알게 될 것입니다. 그 .session 속성은 요청 처리에서 일부 미들웨어 업스트림에 의해 처리되었습니다.

따라서 미들웨어를 사용할 때 req 개체에 상태를 추가하는 것이 일반적입니다. 그러나 표시되는 코드의 .msg 속성 예제에서 req 객체에 값을 넣을 특별한 이유가 없습니다. 로컬 함수에서만 값이 필요하므로 쉽게 (마찬가지로 더 명확하게 말할 수 있습니다) 수 있습니다. 지역 변수에.