Javascript 快速不重定向
无法从管理员登录重定向到管理员页面,但在express cmd log上它会记录:Javascript 快速不重定向,javascript,node.js,express,redirect,post,Javascript,Node.js,Express,Redirect,Post,无法从管理员登录重定向到管理员页面,但在express cmd log上它会记录: a1 a2 Correct POST /admin-login 302 9.469 ms - 54 GET /admin-login? 304 5.112 ms - - GET /admin-page 200 10.198 ms - 4428 GET /stylesheets/admin-login-style.css 304 1.772 ms - - GET /javascripts/admin-login.
a1
a2
Correct
POST /admin-login 302 9.469 ms - 54
GET /admin-login? 304 5.112 ms - -
GET /admin-page 200 10.198 ms - 4428
GET /stylesheets/admin-login-style.css 304 1.772 ms - -
GET /javascripts/admin-login.js 304 13.267 ms - -
这意味着它进入了条件检查,如果用户名是a1,密码是a2,adming页面的状态代码是200,但它没有重定向,它只发送数据并停留在admin登录页面上
<div class="container">
<h1>Welcome</h1>
<form class="form">
<input type="text" placeholder="Username" id="username">
<input type="password" placeholder="Password" id="password">
<button type="submit" id="login-button">Login</button>
</form>
</div>
// frontend
fetch('http://localhost:8080/admin-login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
username: username.value,
password: password.value
}),
});
它是重定向,你只是不看结果 重定向就是你在HTTP中说的:“你想要的东西可以在这个URL上找到” 浏览器已使用
fetch
请求URL。它被告知可以从不同的URL获取数据。它自然而然地遵循了这一点。它得到了答复。然后浏览器将该响应返回给JavaScript。你什么都不做
忽略fetch
的返回值(这是一个允许查看数据的承诺)
重定向并不意味着“在主浏览器窗口中导航到新页面”。您使用fetch
请求数据,您必须使用fetch
的返回值处理响应
如果要登录并导航到新页面,请使用常规表单提交。不要使用Ajax
Ajax用于在不离开当前页面的情况下发出HTTP请求的情况下,尝试发送状态代码为301的重定向
res.sendStatus(301).sendFile(path.join(__dirname, '..', 'public', 'admin_page', 'admin-page.html'));
那么,为了让代码正常工作,我应该在代码中做些什么呢?@AndrijaGajic-正如我所说的,使用常规表单提交而不是Ajax(并在服务器上添加一个主体解析器,可以处理为表单设置的
enctype
)。
// admin panel page
const express = require('express');
const router = express.Router();
const path = require('path');
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
username: String,
password: String
});
const User = mongoose.model('users', userSchema);
router.get('/', (req, res) => {
res.sendFile(path.join(__dirname, '..', 'public', 'admin_page', 'admin-page.html'));
});
module.exports = router;
res.sendStatus(301).sendFile(path.join(__dirname, '..', 'public', 'admin_page', 'admin-page.html'));