javascript - 无法使用 Node JS 在 Express 中重定向

标签 javascript node.js mongodb

我正在学习 Node.js + MongoDB 和其他一些相关工具的基础知识,但我陷入了我制作的简单登录屏幕中,目标是,一旦给出正确的凭据,就重定向到索引。 html 中只有一个文本“欢迎!”。我已经查看了不同的地方(官方 API、教程、此页面等),但还没有看到我的错误。

这是我的服务器:

var http = require('http');
var hostname = 'localhost';
var port = 3000;

var mongojs = require("mongojs");
var express = require("express");

const HOME_URL = "/";
const LOGIN_URL = "/login";
const LOGIN_ACTION_URL = "/doLogin";
const INDEX_URL = "/index";

var app = express();
var db = mongojs("gus:1234@127.0.0.1:27017/awesomeapp");

app.set("views", __dirname + "/public/views");
app.engine('html', require('ejs').renderFile);

app.get(HOME_URL, function(request, response) {
    response.redirect(LOGIN_URL);
});

app.get(LOGIN_URL, function(request, response) {
    response.render("login.html");
});

app.get(INDEX_URL, function(request, response) {
    response.render("index.html");
});

app.get(LOGIN_ACTION_URL, function(request, response) {
    db.users.find({
        user: request.query.user,
        pass: request.query.pass
    }, function(err, doc) {
        if(err) {
            console.log(JSON.stringify(err));
            response.end("An error ocurred");
            return;
        }

        if(doc.length == 0) {
            console.log("invalid_credentials");
            response.end("invalid_credentials");
            return;
        }

        console.log("user found: " + JSON.stringify(doc));

        // This is my problem:
        response.redirect(INDEX_URL);
    });
});

app.listen(port);

这是在登录 View 中完成的:

$.ajax({
    url: "/doLogin",
    type: "GET",
    data: {
        user: $("#user").val().trim(),
        pass: $("#pass").val()
    }
}).done(function(data, textStatus, jqXHR) {
    if(data == "invalid_credentials") {
        $("#alert-wrong-credentials").show(100);
    } else if(data == "ok") {
        $("#alert-wrong-credentials").hide();
    }
}).fail(function(jqXHR, textStatus, errorThrown) {
    console.log(errorThrown);
});

在尝试不存在的凭据时,我可以成功返回错误字符串“invalid_credentials”,并且当我输入正确的凭据时,我可以看到用户数据:

user found: [{"_id":"58af514cb63980d2e8a51fed","user":"gus","pass":"123"}]

但我无法重定向到index.html页面。

最佳答案

登录完成后,您应该在客户端处理重定向。如果您实际访问的是 LOGIN_ACTION_URL,则重定向会起作用。

    if(data == "invalid_credentials") {
        $("#alert-wrong-credentials").show(100);
    } else if(data == "ok") {
        // Redirect
        window.location.href = "index_url"; 
    }

另外,这里有一个类似的问题Node.js Page Redirect on AJAX login? With a function call after redirect?

关于javascript - 无法使用 Node JS 在 Express 中重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428069/

相关文章:

javascript - 纯 Javascript 插件开发

node.js - 服务器端渲染 (Next.js) 和静态站点渲染 (Gatsby.js) 有什么区别?

node.js - 如何实现noSQL数据库抽象?

javascript - 以原子方式更新数组项

java - 在 Spring boot 运行时指定 MongoDb 集合名称

javascript - 如何在 jQuery onload 中选中复选框

javascript - Javascript 延迟执行

javascript - 路线不适用于模块化结构

javascript - 如何使用 Passport 和 Node.js 在客户端区分经过身份验证的用户?

java - Vaadin动态加载JavaScript、CustomLayout