Nodejs 重定向不起作用
Nodejs redirection is not working
我是节点的新手。无论我想做什么,都是简单的从提交到提交后重定向到特定模板。这是我的目录结构
- 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.com
和 password:123
的表单,它不会重定向到test.html
,虽然我可以阅读控制台消息 "logged in"
。
你可以尝试使用
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)
不是通过 AJAX 调用 ($.post()
) 向 /login
发出请求,而是让表单提交给它:
<form action='/login' method='post'>
...
</form>
在您当前的情况下,您正在将 AJAX 请求 重定向到 /home
,而不是整个页面。
此外,当用户名 and/or 密码不匹配时,您的处理程序不执行任何操作,这意味着请求将停止。在这种情况下,您还需要发回响应(可能重定向到错误页面,或再次登录页面)。
我是节点的新手。无论我想做什么,都是简单的从提交到提交后重定向到特定模板。这是我的目录结构
- 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.com
和 password:123
的表单,它不会重定向到test.html
,虽然我可以阅读控制台消息 "logged in"
。
你可以尝试使用
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)
不是通过 AJAX 调用 ($.post()
) 向 /login
发出请求,而是让表单提交给它:
<form action='/login' method='post'>
...
</form>
在您当前的情况下,您正在将 AJAX 请求 重定向到 /home
,而不是整个页面。
此外,当用户名 and/or 密码不匹配时,您的处理程序不执行任何操作,这意味着请求将停止。在这种情况下,您还需要发回响应(可能重定向到错误页面,或再次登录页面)。