2017-03-21 3 views
0

내 nodejs 응용 프로그램에서 이름/암호를 사용하는 HTML 파일을 표시하기 위해 sendFile을 사용하는 route/login이 있습니다. 내 서버 측 app.js에서 이름과 암호를 사용하도록 게시 전화를 썼습니다. 지금 내 html Iam에서 아약스 호출을 호출하여 호출을 호출하고 성공하면/admin 페이지로 이동합니다.이 경우 나는 res.send() 호출로 내 나머지 호출을 생각하고 있습니다. 그러나 Iam은 인식하지 못합니다. HTML 파일을 보내 ..노드 js 응용 프로그램의 작은 문제

app.get('/', function(req, res, next) { 
    res.sendFile(__dirname + '/public/views/home.html'); 
}); 

app.get('/login', function(req, res, next) { 
    res.send('respond with a resource'); 
    res.sendFile(__dirname + '/public/views/login.html'); 
}); 

app.get('/admin', function(req, res, next) { 
    res.sendFile(__dirname + '/public/views/admin.html'); 
}); 

app.post('/verifylogin',function(req,res){ 
    var username = req.headers.uname; 
    var password = req.headers.pwd; 
    var uname = "admin"; 
    var pwd = "admin"; 
    var login = false; 

    if(uname == username && pwd == password){ 
     console.log("success"); 
     login = true; 
    } else { 
     console.log("fail"); 
     login = false; 
    } 

    if(login == true){ 
     res.send();//how can I take to /admin here 
    } else { 
     res.send("Bad luck"); 
    } 
}); 

HTML

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

<script type="text/javascript"> 
    function login(){ 
     var uname = document.getElementById('uname').value; 
     var pwd = document.getElementById('pwd').value; 

     $.ajax({ 
      url : '/verifylogin', 
      type : "POST", 
      headers : { 
       "uname":uname, 
       "pwd" :pwd 
      } 
     }); 
     console.log("name",uname); 
    } 
</script> 

<h1>Login</h1> 
<p> 
    <label class="control-label">Username</label> 
    <input type="text" placeholder="Username" id="uname"/> 
</p> 
<p> 
    <label class="control-label">Password</label> 
    <input type="password" placeholder="Password" id="pwd"/><br/> 
</p> 
<p> 
    <button type="submit" class="btn btn-primary" onclick="login()">Login</button> 
</p> 

를 로그인 성공 인 경우 방법 I에게 길을 수/admin .. 누군가 여기서 도움을받을 수 있습니다!

+0

:

$.ajax({ url : '/verifylogin', type : "POST", headers : { "uname":uname, "pwd" :pwd }, success: function(data) { window.location = data; } }); 

서버 :

아약스 게시물에

이 성공의 함수를 추가 사용자가 로그인했는지 확인하십시오. 로그인 페이지에 로그인 쿠키가있는 경우/admin으로 리디렉션해야합니다 (그렇지 않은 경우). - 로그인보기를 보여줍니다. 전화를 걸면 로그인을 쿠키에 저장 한 다음 로그인 한 상태에서 ok 또는 ko로 답합니다. 프론트 엔드에서는 "window.reload()"와 같은 대답을합니다. – Maikal

+1

제목을 편집하십시오 귀하의 질문 중 귀하의 문제의 주제가 아닌 일반 기술 분야. 모든 node.js 질문의 주제가 "node.js question"인 경우 이미지를 만들 수 있습니까? 그 유형의 주제는 의미가 없습니다. 태그는 이미 질문을 node.js로 식별합니다. 주체는 어떤 런타임 문제가 아니라 어떤 유형의 문제인지 알려 주어야합니다. – jfriend00

답변

1

@ jfriend00은 (는) 브라우저가 ajax 호출에서 리디렉션되지 않음을 명시했습니다. 그래서 내가 보여 줄 2 가지 옵션 중 1 가지를 할 수 있습니다.

1º 옵션 :

클라이언트는 : 아약스 스크립트를 제거하고 HTML 양식을 통해 호출을 처리합니다.

는 HTML 페이지에 양식을 추가

<form method="post" action="/verifylogin"> 
    <label class="control-label">Username</label> 
    <input type="text" placeholder="Username" name="uname"/> 
    <label class="control-label">Password</label> 
    <input type="password" placeholder="Password" name="pwd"/> 
    <button type="submit" class="btn btn-primary">Login</button> 
</form> 

서버 :

가 지정된 URL로 리디렉션 대신 sendredirect 방법을 사용합니다.

if (login == true) { 
    res.redirect('/admin'); 
} 

2 º 옵션 :는 AJAX 호출 콘텐츠로 페이지를 전송하고 그것에 페이지를 리디렉션합니다.

클라이언트 : 당신은 쿠키를 사용합니다 .. 당신은 이론에 대한 부족이

if(login == true) { 
    res.contentType('application/json'); 
    var data = JSON.stringify('your_url') // im not sure if you can use relative path here 
    res.header('Content-Length', data.length); 
    res.end(data); 
} 
+0

.. 작동하지 않았습니다. – user7350714

+0

@ user7350714 어떤 오류가 있습니까? 어떻게 된 거예요? – Jackowski

+0

이 내 서버 측 logs..Getiing입니다 (302) 성공 POST/(302) 21.890 MS verifylogin - 그것은 redirected..what 여기에 문제가 일부러 같은 XHR..But에 응답이 보이는 내가 HTML을 볼 수있는 28 – user7350714

관련 문제