节点js应用程序中的小问题

时间:2017-03-21 19:40:36

标签: javascript ajax node.js

在我的nodejs应用程序中,我有路由/登录,它使用sendFile显示我的html文件,它取名字和密码。在我的服务器端app.js我写了一个名字和密码的调用。现在从我的html Iam做一个ajax调用调用post调用,如果成功,我想去/ admin页面。为此我想在我的休息调用中调用res.send()。但是我不知道如何发送html文件.. < / p>

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 ..有人可以帮忙!

1 个答案:

答案 0 :(得分: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重定向到指定的网址。

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);
}