2017-03-21 27 views
0

在我的nodejs應用程序中,我有路由/登錄,它使用sendFile來顯示我的html文件,它需要名稱和密碼。在我的服務器端app.js中,我寫了post調用以取名和password.Now從我的HTML IAM做ajax調用來調用post調用,如果成功,我想去/管理頁面。對於這個我打算在我的休息中調用自己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> 

如果登錄成功哪能路線/ admin ..有人可以幫忙!

+0

你對理論缺乏。您應該使用cookies檢查用戶是否已登錄。如果他在登錄頁面並擁有登錄cookie,則應將其重定向到/ admin,如果不是 - 顯示登錄視圖。當你打電話後,你保存登錄到cookie,然後用ok或者ko回答,如果你登錄了。在前端如果你確定你做「window.reload()」例如.. – Maikal

+1

請編輯標題你的問題是你的問題的主題,而不是技術的一般領域。如果所有的node.js問題都有「node.js問題」的主題,你可以用它來成像嗎?這類主題毫無意義。標籤已經將問題標識爲node.js.主題應該告訴我們你有什麼類型的問題,而不是什麼運行時正在使用。 – jfriend00

回答

1

由於@ jfriend00聲明瀏覽器不會從ajax調用重定向。所以你可以做我將展示的兩個選項中的一個。

1º選項:

客戶:刪除AJAX腳本和處理通過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> 

服務器

使用redirect方法,而不是send重定向到指定的URL。

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

2º選項:發送頁面內容的AJAX調用和頁面重定向到它。

客戶

在您的AJAX後添加成功功能:

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

服務器

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/verifylogin 302 21.890毫秒 - 28 – user7350714