为什么我的get请求有时可以工作,但大多数时候是404?

qgelzfjb  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(314)

正如标题所说,为什么我的get请求有时有效,但大多数时候是404?
一直在胡闹着把“next()”去掉,但效果一样并不重要。与生成“res.json(req.user.firstname);”相同在------router.get中(“/user,auth,(req,res){})-----

module.exports.isAuth = (req, res, next) => {
  if (req.isAuthenticated()) {
    console.log(req.user);
    res.json(req.user.firstName);
     //next()

  } else {
    console.log("Nope");

    res
      .status(401)
      .json({ msg: "You are not authorized to view this resource" });
  }
};

当get请求起作用时,后端上的日志^^^^^会以两种不同的方式记录两次,如bwloe。又好又丑。

{
  _id:  60e9fad2837ff62fcb580f27,
  username: 'drakecoleman@rocketmail.com',
  firstName: 'Drake',
  lastName: 'Coleman',
  hash: 'e017095b5684f72d88d9103f3a5df9dfbcb8fe23e823b6f0551a20151710721304b58cb02bc62b60098a383d0f573fdf5bcd30aa89a5b266db0d7aceb6d25656',
  salt: '7e040e90411d647200cc9cc120a1b3b182b035105ce3488fbcbfd39b56f44d9b',
  admin: true,
  __v: 0
}

{“_id”:“60e9fad2837ff62fcb580f27”,“用户名”:”drakecoleman@rocketmail.com“,”姓氏“:”德雷克“,”姓氏“:”科尔曼“,”哈希“:”E017095B5684F72D88D9103F3A5DF9DFBCB8FE23E823B6F0551A20151710721304B58CB02BC62B60098A383D0F573FDF5BCD30AA89A5B266DB0D7ACEB6D2566“,”盐“:”7E040E90411D647200C9CC120A1B3B182B035CE3488FBCBFD39B56F44D9B9B9B6F44D9B“,”管理“,”真“,”真“,”
当它是404时,日志只在后端记录用户的丑陋版本。
index.js

const router = require("express").Router();
const passport = require("passport");
const bodyParser = require("body-parser");
const genPassword = require("../lib/passwordUtils").genPassword;
const connection = require("../config/database");
const mongoose = require("mongoose");
const User = mongoose.models.User;

const isAuth = require("./authMiddleware").isAuth;

router.use(bodyParser.urlencoded({ extended: false }));
/**
 * -------------- GET ROUTES ----------------
 *
 */
router.get("/user", isAuth);

React前端
user.js

import React from "react";
// import { Redirect } from "react-router-dom";

function UserProfile() {
  // if (props.auth === true) {
  //   return <Redirect to="/login" />;
  // } else {
  //   return <h1 className="red">Logged in </h1>;
  // }
  fetch("http://localhost:3000/user", {
    method: "GET",
    credentials: "include",
    withCredentials: true,
    headers: {
      "Content-Type": "application/json",
    },
  })
    .then((res) => res.json())
    .then((data) => console.log(data))
    .catch((err) => console.log(err));
  return <h1>Hello</h1>;
}

export default UserProfile;

这是在请求之前在前端的控制台中,但我不认为这是一个问题,因为我在其他路线上得到这个,没有问题“[hmr]等待来自wds的更新信号…”
但我确实在404运行时首先在前端控制台上得到了这个错误
user.js:10gethttp://localhost:3000/user 404(未找到)
几秒钟后,我得到了(它也不是红色背景,只是白色文本)
typeerror:无法获取用户。js:10获取加载失败:获取“http://localhost:3000/user".
有人在discord上说,要确保我在app.js后端页面上初始化了会话,我确实这样做了。app.use(passport.initialize());app.use(passport.session());

qncylg1j

qncylg1j1#

刚刚发现了问题。只是为了表明,在显示所有代码时,您永远不会出错。它最终成为我的反序列化用户中间件。它被设置为

passport.deserializeUser((id, done) => {
  User.findById(id, (err, user) => {
    done(err, JSON.stringify(user));
  })
    .then((user) => {
      done(null, user);
    })
    .catch((err) => done(err));
});```

And when I changed to to this, my site worked 100%.
passport.deserializeUser((id, done) => {
  User.findById(id, (err, user) => {
    done(err, user);
  })
    .then((user) => {
      done(null, user);
    })
    .catch((err) => done(err));
});

请原谅我帮助过那些不知道这部分代码的人。

相关问题