繁体   English   中英

app.post 有效,但 router.post 无效?

[英]app.post works, but router.post does not?

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

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

ps.ss:你可能会看到很多重复的和/或不需要的导入,但我现在不想解决这个问题,那只是我想尽一切办法让它工作。 我可以稍后修复它。

应用程序.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);

索引.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;

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

app.use('/', routes);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM