【问题标题】:Nodejs redirection is not workingNodejs重定向不起作用
【发布时间】:2016-04-08 22:26:31
【问题描述】:

我是新来的节点。无论我想要做什么都是从提交到提交后重定向到特定模板的简单操作。这是我的目录结构

  • node_modules
  • index.js
  • login.html
  • test.html

这是我的index.js 文件

var app = require('express')();
var http = require('http').Server(app);
var express = require('express')
var bodyParser = require('body-parser')

app.get('/', function(req, res) {
    res.sendFile(__dirname + '/login.html');

});

app.post('/login', function(request, response) {
    console.log(request.body.user);
    console.log(request.body.password);
    if (request.body.user === "test@gmail.com" && request.body.password === "123") {
        console.log("logged in");
        response.statusCode = 200;
        response.setHeader("Location", "/home");
        response.end();
    }
});

app.get('/home', function(req, res) {
    res.sendFile(__dirname + '/test.html');

});

http.listen(3001, function() {
    console.log('listening on *:3001');
});

在我的login.html 文件中,我有一个简单的表单

        <label for="user" class="sr-only">Email address</label>
        <input type="email" id="user" class="form-control" name="user[email]" placeholder="Email address" required autofocus autocomplete="on">
        <label for="password" class="sr-only">Password</label>
        <input type="password" id="password" name="user[password]" class="form-control" placeholder="Password" required>
        <div class="checkbox">
            <label>
                <input type="checkbox" value="remember-me"> Remember me
            </label>
        </div>
        <button class="btn btn-lg btn-primary btn-block" type="button" id="submit">Sign in</button>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script>
        $(document).ready(function() {
            var user, pass;
            $("#submit").click(function(event) {
                user = $("#user").val();
                pass = $("#password").val();
                $.post("/login", {user: user, password: pass}, function(data) {
                    if (data === 'done')
                    {
                        alert("login success");
                    }
                });
            });
        });
    </script>

当我在localhost:3001 运行我的应用程序时出现login.html,如果我使用username:test@gamil.compassword:123 提交表单,它不会重定向到test.html,尽管我可以阅读控制台消息"logged in" .

【问题讨论】:

  • 试试response.redirect

标签: jquery node.js forms express url-routing


【解决方案1】:

你可以尝试使用

app.post('/login', function(request, response) {
    console.log(request.body.user);
    console.log(request.body.password);
    if (request.body.user === "test@gmail.com" && request.body.password === "123") {
        console.log("logged in");
        response.redirect('/home')
    }
});

这里有关于快速重定向的文档(http://expressjs.com/en/api.html#res.redirect)

【讨论】:

  • 谢谢,现在它没有显示任何错误,即使我调试它,它也清楚地说“200回家”,但它根本没有打开我的test.html文件
【解决方案2】:

不要通过 AJAX 调用 ($.post()) 向 /login 发出请求,而是让表单提交给它:

<form action='/login' method='post'>
...
</form>

在您当前的情况下,您将 AJAX 请求 重定向到 /home,而不是整个页面。

此外,当用户名和/或密码不匹配时,您的处理程序不会执行任何操作,这意味着请求将停止。在这种情况下,您还需要发回响应(可能重定向到错误页面,或再次重定向到登录页面)。

【讨论】:

    猜你喜欢
    • 2018-02-11
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多