猫鼬代码在部署时不起作用AWS Elastic Beanstalk

问题描述

我正在尝试在我的个人网站中构建一个基本的身份验证系统,该系统由React提供支持。我希望能够使用data.users MongoDB Atlas集合中的文档定义的用户名和密码登录和注销。我按照this教程进行了个性化设置。一切都可以在localhost上完美运行,但是将项目部署到AWS Elastic Beanstalk时出现504网关超时。我正在部署3个docker容器:一个用于我的前端,一个用于我的nginx代理传递,另一个用于我的后端。我认为无论如何我的Nginx配置都不会出现问题,因为我的虚拟发布请求(与我所有身份验证内容的路由相同,并且由res.send(“ string”)组成)可以正常工作。只是我的前端发帖失败:

  postLogin = (userName,password) => {
    axios({
      method: "post",// url: "http://localhost:5000/auth/login",url: "https://example.com/api/auth/login/",data: {
        name: userName,password: password,},})
      .then(
        function (res) {
          if (res.status === 200) {
            this.setAuthTokens(res.data);
            this.setIsError(false);
          } else {
            this.setIsError(true);
          }
        }.bind(this)
      )
      .catch((e) => {
        this.setIsError(true);
      });
  };

我相关的文件结构是:

  • 我的网站
    • 后端
      • 型号
        • userModel.js
      • 路线
        • authRoute.js
      • server.js

以下是相关文件:

  • userModel.js
const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const userSchema = new Schema({
  name: {
    type: String,required: true,min: 1,max: 20,password: {
    type: String,max: 2000,});

module.exports = mongoose.model("User",userSchema);
  • authRoute.js
const router = require("express").Router();
const User = require("../models/userModel");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const dotenv = require("dotenv").config({ path: "./.env" });
if (dotenv.error) {
  throw dotenv.error;
}

//login
router.post("/login",async (req,res) => {
  //check if user in db
  try {
    const user = await User.find({ "name": req.body.name });
    if (user.length === 0) {
      return res.status(400).send("Name not found.");
    }
    const bcryptRes = await bcrypt.compare(
      req.body.password,"my_generated_hashstring"
    );
    if (!bcryptRes) {
      return res.status(400).send("Wrong password.");
    }
    const token = jwt.sign({ _id: user._id },process.env.TOKEN_SECRET,{
      expiresIn: "1h",});
    res.send({ user: user._id,token: token });
  } catch (err) {
    res.status(500).send(err);
  }
});

// verify
router.post("/verify",(req,res) => {
  let thingy = true;
  jwt.verify(req.body.token,function (err,decoded) {
    if (err) {
      console.log(err);
      thingy = false;
    }
  });
  res.send(thingy);
});

// dummy post
router.post("/test",res) => {
  res.send("uwa");
});

module.exports = router;
  • server.js
const mongoose = require("mongoose");

const express = require("express"),app = express(),PORT = 5000;
const bodyParser = require("body-parser");
const cors = require("cors");
app.use(cors());

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

//ROUTES
const authRoute = require("./routes/authRoute"); //contains register and login endpoints eg: /auth/register,/auth/login
app.use("/auth",authRoute);
//connect to mongodb
mongoose.connect(
  process.env.DB_CONNECT,{ useNewUrlParser: true,useUnifiedTopology: true,useFindAndModify: false },() =>
    console.log("Connection to MongoDB established. I STILL FEEL ALIVEEEEEEE")
);

app.listen(PORT,() => console.log("Server listening on port " + PORT + "."));

这里有一个screenshot,用以证明我的data.users集合中有东西。

part of my eb log显示我确实连接到MongoDB。

请提前谢谢,让我知道是否需要提供更多详细信息。抱歉,如果我只是个疯子。

P.S。我认为这是猫鼬代码失败,而不是bcrypt.compare,因为我将print语句放在User.find()之前和之后,并且仅将User.find()之前的打印语句显示在我以前的eb日志中。我之所以发布此问题,而不是使用更多的打印语句进行调试,是因为进行eb部署会花费很长时间。我浏览了一些相关的StackOverflow链接,例如Mongoose .findOne() breaks when deployed504 error when inserting into mongo database。但是,它们要么没有解决,要么是由于错别字。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...