2017-03-21 24 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