【问题标题】:app.post works, but router.post does not?app.post 工作,但 router.post 没有?
【发布时间】:2021-12-05 05:03:25
【问题描述】:

我正在使用 React 在前端登录。它转到我的节点/Express/Passport 后端。当它进入后端时,我能够成功登录。但后来我无法将其传达回前端?我一直在前端得到 404 和诸如此类的东西。我已经尝试了一切,将 app.js (app.use) 上的所有内容导入 index.js (router.use) 文件。我可以让它工作的唯一方法是将router.post“login”移动到app.js文件并将其用作app.post,然后它只在我将路由放在“app.use(路线)”。不过,我的注册后路线也可以正常工作。所以我迷路了。我已经深入研究了 cors 和 body 解析器的东西以及 configs() 和 man,一切。它是一个很深的兔子洞。如果没问题,我需要一些指导和解释。我一直在努力工作,在这里真的需要一些导师的帮助。我可以将护照中间件包含在另一个文件中,但我认为这不是问题,因为我能够在中间件末尾使用 console.log 登录我,然后在最后一个 req res 函数中使用 console.logging。非常感谢您的帮助!

ps:真正的问题是“标头已发送”,因为当我尝试以各种可能的方式发送状态(200)时,它不起作用(当发布路线是“router.post”时。app.post 工作正常很好)

ps.s.s:你可能会看到很多重复和/或不需要的导入,但我现在不想解决这个问题,这只是我尝试了各种方法让它工作。我可以稍后解决。

app.js

const express = require("express");
const app = express();
const mongoose = require("mongoose");
const session = require("express-session");
const passport = require("passport");
const crypto = require("crypto");
const routes = require("./routes");
const connection = require("./config/database");
const cors = require("cors");
app.use(cors({ origin: "http://localhost:3001", credentials: true }));
const User = mongoose.models.User;

const bodyParser = require("body-parser");

const MongoStore = require("connect-mongo")(session);

require("dotenv").config();

app.use(express.json());

app.use(express.urlencoded({ extended: true }));

const sessionStore = new MongoStore({
  mongooseConnection: mongoose.connection,
  collection: "sessions",
});

app.use(
  session({
    secret: "zdfbdaf",
    resave: true,
    saveUninitialized: true,
    store: sessionStore,
    cookie: {
      cookie: { secure: false },
      maxAge: 1000 * 60 * 60 * 24,
    },
  })
);



require("./config/passport");

app.use(passport.initialize());
app.use(passport.session());

app.use(routes);
app.post(
  "/login",

  passport.authenticate("local"),
  (req, res) => {
    console.log("working");
    res.status(200).send();
  }
);

app.listen(3000);

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;
// cors is needed with router.use else you have to put routes on the app.js
// const cors = require("cors");
// router.use(cors({ origin: "http://localhost:3001", credentials: true }));
// const isAdmin = require("./authMiddleware").isAdmin;
router.use(bodyParser.urlencoded({ extended: false }));

/**
 * -------------- Post ROUTES ----------------
 *
 */

 router.post(
   "/login",

   passport.authenticate("local"),
  (req, res) => {
    console.log("working");
     res.sendStatus(200);
   }
 );

router.post("/register", (req, res) => {
  const saltHash = genPassword(req.body.repeatPassword);

  const salt = saltHash.salt;
  const hash = saltHash.hash;

  const newUser = new User({
    username: req.body.email,
    hash: hash,
    salt: salt,
  });

  newUser.save().then((user) => {});
  res.sendStatus(200);
});



module.exports = router;

【问题讨论】:

    标签: javascript node.js express passport-local


    【解决方案1】:

    尝试删除app.post方法调用,并使用它来定义子路由器路由。

    app.use('/', routes);
    

    目前,同一条路由有两个处理程序,这可能会导致错误。

    【讨论】:

      猜你喜欢
      • 2018-05-16
      • 2015-03-04
      • 2020-07-08
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多