【问题标题】:Express not redirecting快递不重定向
【发布时间】:2020-11-08 14:18:25
【问题描述】:

无法从 admin-login 重定向到 admin-page,但在 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.js 304 13.267 ms - -

表示如果用户名是a1密码是a2进入了条件检查,adming-page的状态码是200,但是它不是重定向,它只发送数据并停留在admin-login页面上

<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
            }),
        });
const express = require('express');
const router = express.Router();
const path = require('path');

router.get('/', (req, res) => res.sendFile(path.join(__dirname, '..', 'public', 'admin_login', 'admin-login.html')));

router.post('/', (req, res) => {
    console.log(req.body.username);
    console.log(req.body.password);
    if (req.body.username === 'a1' && req.body.password === 'a2') {
        console.log('Correct');
        return res.redirect('http://localhost:8080/admin-page');
    } else {
        console.log('Not logged in');
        return res.redirect('back');
    }
});
// backend which gets the data
module.exports = router;
// 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;

【问题讨论】:

    标签: javascript node.js express redirect post


    【解决方案1】:

    它正在重定向,您只是没有查看结果。

    重定向就是您在 HTTP 中所说的:“您可以在此 URL 上找到您想要的内容”。

    浏览器已请求使用fetch 的URL。被告知它可以从不同的 URL 获取数据。它自动跟随。它得到了回应。然后浏览器将该响应返回给您的 JavaScript。你什么都不做的地方。

    您忽略了来自fetch 的返回值(这是一个可以让您查看数据的 Promise)。

    重定向并不意味着“导航到主浏览器窗口中的新页面”。您使用fetch 请求数据,您必须使用fetch 的返回值处理响应。

    如果您想登录并导航到新页面,请使用常规表单提交。不要使用 Ajax。

    Ajax 用于在不离开当前页面的情况下发出 HTTP 请求。

    【讨论】:

    • 那么我应该在此代码中进行哪些更改才能使其正常工作?
    • @AndrijaGajic — 正如我所说,使用常规表单提交而不是 Ajax(并在服务器上添加一个可以处理您为表单设置的 enctype 的正文解析器)。
    【解决方案2】:

    尝试发送带有状态码 301 的重定向

        res.sendStatus(301).sendFile(path.join(__dirname, '..', 'public', 'admin_page', 'admin-page.html'));
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2018-08-25
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      相关资源
      最近更新 更多