【问题标题】:Deploying the React/Nodejs/Mysql project from locally to AWS using AWS-Lamda RDS使用 AWS-Lambda RDS 将 React/Nodejs/Mysql 项目从本地部署到 AWS
【发布时间】:2020-08-17 20:32:51
【问题描述】:

我正在努力使用 Lamda 功能配置后端,目前我有完整的堆栈应用程序,并且在本地它工作正常。 我还设法部署了 mysql 服务器(aws rds)和前端页面(S3 存储桶),当我尝试部署后端(Lamda 函数)时,我有点困惑。

如果有人可以在这里为我的以下问题提供建议或指点,我真的很感激。

Q1- 我已经挖掘并可以看到我可以使用 export.handler 但在这里我有 two API 调用,我需要制作两个单独的函数吗?如果是,那么做我需要上传两个 zip 文件以及两个文件中的所有其他依赖项

Q2- 是否是从 Lamda 函数连接到 rds DB 的正确方法,如下所示,我是否仍然能够执行相同的 connect.query commads....来使用 mysql(它是如果我从本地访问 aws-rds,目前工作正常)


     let connection = mysql.createConnection({
          host: "root.cjfdyreioui1.eu-west-2.rds.amazonaws.com", // here i connect to rds aws
          user: "root",
          password: "abc1234",
       
          database: "join_us",
          insecureAuth: true,
        });

-Backend-codeserver.js 的片段,我压缩了大约 30mb(我是否需要保留 index.js 文件名)


    const express = require("express");
    const mysql = require("mysql");
    const jwt = require("jsonwebtoken");
    const auth = require("./verifyTokenExisting");
    const authNew = require("./verifyTokenNew");
     const cors = require("cors");
    const cookieParser = require("cookie-parser");
    const pdf = require("html-pdf");
    const pdfTemplate = require("./documents/pdfTemplate");
    const fs = require("fs");
    
    const app = express();
    app.use(express.json());
    app.use(cookieParser());
    
    
    app.use(
      cors({
        credentials: true, // for cookies
        origin: "http://localhost:3000",
        optionsSuccessStatus: 200,
      })
    );
    let connection = mysql.createConnection({
      host: "root.cjfdyreioui1.eu-west-2.rds.amazonaws.com", // here i connect to rds aws
      user: "root",
      password: "abc1234",
   
      database: "join_us",
      insecureAuth: true,
    });
    
    
    
    //!  when clicked on signin page to verify after signin/
    
    app.post("/api/verifyifloginalready", (req, res) => {
      let token = req.cookies.yogaoutlet_access_token;
      //
    
      if (!token) {
        return res.status(401).end();
      }
    
      let decodepayload;
    
      try {
        decodepayload = jwt.verify(token, "lllfasdgfdadsfasdfdasfcadsf");
    
      } catch (error) {
        if (error instanceof jwt.JsonWebTokenError) {
       
          // if invalid token
          res.status(401).end();
        } else {
          res.status(400).end();
        }
      }
      connection.query("SELECT * FROM  users WHERE email=?;", [decodepayload.email], function (err, results) {
        res.json(results);
      });
    });
    
    ////!  LOGIN & LOGOUT
    
    app.post("/api/newuser", (req, res) => {
      let x1 = req.body;
      
      if (req.body.logout === false) {
        connection.query("SELECT * FROM  users WHERE email=?;", [x1.email], function (err, results) {
        
          if (err) console.log("13333", err);
          else {
            if (results[0].email && results[0].password) {
         
    
              if ((results[0].password == x1.password && results[0].userloginStatus == true) || (results[0].password == x1.password && results[0].userloginStatus == null)) {
                const payload = { email: results[0].email };
                 const token = jwt.sign(payload, "lllfasdgfdadsfasdfdasfcadsf");
                 res.cookie("yogaoutlet_access_token", token, {
                  maxAge: 25 * 24 * 60 * 60 * 1000,
                  httpOnly: true, // it will enable on frotend-javascript to not have access to cokkies
                  
                });
    
                res.status(200).end();
    
                  connection.query(
                  "UPDATE  users SET userloginStatus=? WHERE email=?",
                   
                  ["1", results[0].email],
                  function (err, results) {
                    if (err) throw err;
                    console.log(results);
                  }
                );
              } else {
                res.json({
                  data: "invalid  password",
                });
              }
            } else res.redirect("http://localhost:3000/about");
          }
        });
      } else {
        
        const payload = { email: req.body.email };
        console.log("339x", payload);
        const token = jwt.sign(payload, "lllfasdgfdadsfasdfdasfcadsf");
    
        res.clearCookie("yogaoutlet_access_token");
    
        res
          .json({
            data: "User Logged out",
          })
          .end();
      }
    });

【问题讨论】:

    标签: amazon-web-services amazon-s3 deployment aws-lambda


    【解决方案1】:

    第一季度: 是的,您使用 export.handler 因为 Lambda 需要一个入口点。在此处查看 AWS Lambda 开发人员指南:https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html

    但 Lambda 无法运行服务器,因此您的 server.js 文件必须进行调整。您需要其他东西来处理来自客户端的连接。也许 API Gateway 符合要求。

    部署时上传 ZIP 存档:https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html

    第二季度: 运行使用 RDS 的 Node 函数的 AWS Lambda 并不是我的强项。但是,如果您的服务器连接、执行事务然后快速断开连接,那应该不是问题。在任何情况下,如果您遇到问题,AWS CloudWatch 都会为您提供帮助。

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2019-09-01
      • 2020-11-05
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多