我正在学习 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/