【问题标题】:AWS Amplify: NodeJS and MSSQL cannot connect to databaseAWS Amplify:NodeJS 和 MSSQL 无法连接到数据库
【发布时间】:2022-01-03 05:01:02
【问题描述】:
const express = require('express')
const bodyParser = require('body-parser')
const awsServerlessExpressMiddleware = require('aws-serverless-express/middleware')
const app = express()
app.use(bodyParser.json())
app.use(awsServerlessExpressMiddleware.eventContext())  

// Enable CORS for all methods
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*")
  res.header("Access-Control-Allow-Headers", "*")
  next()
});

// Connect to DB
const sql = require("mssql")

const config = {
    server: "SERVER",
    user: "USER",
    password: "PASSWORD",
    port: 1433,
    database: "DATABASE"
}

console.log("Attemping to connect...")
let q = "SELECT * FROM QUERY"
// Async Await
async function getDB() {
    console.log("Inside getDB...")
    try {
        let pool = await sql.connect(config)
        console.log("Connected")
        let item = await pool.request().query(q)
        console.log(item)
        sql.close()
        return item;
    } catch(err) {
        console.log("Query did not complete.")
        console.log(err.message);
        sql.close();
    }
}
let result = getDB();
console.log("Result: " + result)
app.get('/', function(req, res) {

  res.status(200).json({result, url:req.url})

}); 

我正在使用 AWS amplify 运行应用程序,并尝试通过我的后端 lambda 函数连接到 RDS 数据库。当我检查 CloudWatch 时,我发现与数据库的连接失败。我不确定问题出在哪里,因为我使用完全相同的设置通过 Python 使用 pyodbc 库进行连接。

CloudWatch

【问题讨论】:

  • 您的 RDS 实例是否公开?
  • 如果您保持 RDS 和 lambda 私有(在 VPC 内),那么您应该在 RDS 安全组中为端口 1433 定义一个入口规则,以允许来自 lambda 安全组的流量。
  • 我的 RDS 实例不是公开的。它位于带有 NAT 网关的 VPC 内。我为端口 1433 正确设置了 lambda 安全组和 VPC。

标签: node.js sql-server amazon-web-services express


【解决方案1】:
var mysql = require('mysql')
var connection = mysql.createPool({
  host: "localhost",
  user: "root",
  password: "",
  database: "snappay",
  port : "3306"
})
connection.getConnection((err, connection) => {
    if (err) {
        if (err.code === 'PROTOCOL_CONNECTION_LOST') {
            console.error('Database connection was closed.')
        }
        if (err.code === 'ER_CON_COUNT_ERROR') {
            console.error('Database has too many connections.')
        }
        if (err.code === 'ECONNREFUSED') {
            console.error('Database connection was refused.')
        }
    }
    if (connection) connection.release()
    return
})
module.exports = connection

请按照这个连接代码,希望它会工作 参考:https://github.com/vishalims095/nodeJS_Mysql/blob/developer/src/Modules/connection.js

【讨论】:

  • 这是为 mysql 而不是 microsoft sql server。它们是两个不同的数据库。
猜你喜欢
  • 2013-03-15
  • 2020-03-07
  • 2019-04-24
  • 1970-01-01
  • 2010-10-02
  • 2023-03-06
  • 1970-01-01
  • 2011-05-22
  • 2016-06-20
相关资源
最近更新 更多