首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AWS中使用nodejs执行sql查询?

如何在AWS中使用nodejs执行sql查询?
EN

Stack Overflow用户
提问于 2022-07-17 03:20:49
回答 1查看 286关注 0票数 2
代码语言:javascript
复制
exports.handler = async (event) => {
    const sql = require('mssql');
    
    let config = {
        user: "MyUsername",
        password: "MyPassword",
        server: "MyServer",
        port: 1433,
        options: {
            database: 'MyDatabase',
            encrypt: false,
        }
    };


    sql.connect(config, (err) => {
        if (err) { console.log(err);}
        else {
            console.log('connected');

            let request = new sql.Request();
            const theQuery = "SELECT * FROM MyTable";

            request.query(theQuery, (err, data)=> {
                if(err) { console.log(err); }
                else { console.log(data); }
            })
       }
    });
};

我试图用它执行一个简单的SELECT查询,当我在本地运行它时,它似乎运行得很好,但是当我在Lambda上尝试它时,它就超时了。我在与Server相同的VPC上有lambda,所以它不是连接问题。有什么想法吗?

代码语言:javascript
复制
2022-07-17T03:10:02.912Z    a4775342-517a-4511-920e-46269ee07627    INFO    ConnectionError: Failed to connect to ********:1433 in 15000ms
    at /opt/nodejs/node_modules/mssql/lib/tedious/connection-pool.js:70:17
    at Connection.onConnect (/opt/nodejs/node_modules/tedious/lib/connection.js:1051:9)
    at Object.onceWrapper (node:events:642:26)
    at Connection.emit (node:events:527:28)
    at Connection.emit (node:domain:475:12)
    at Connection.emit (/opt/nodejs/node_modules/tedious/lib/connection.js:1079:18)
    at Connection.connectTimeout (/opt/nodejs/node_modules/tedious/lib/connection.js:1284:10)
    at Timeout._onTimeout (/opt/nodejs/node_modules/tedious/lib/connection.js:1229:12)
    at listOnTimeout (node:internal/timers:559:17)
    at processTimers (node:internal/timers:502:7) {
  code: 'ETIMEOUT',
  originalError: ConnectionError: Failed to connect to ********:1433 in 15000ms
      at Connection.connectTimeout (/opt/nodejs/node_modules/tedious/lib/connection.js:1284:26)
      at Timeout._onTimeout (/opt/nodejs/node_modules/tedious/lib/connection.js:1229:12)
      at listOnTimeout (node:internal/timers:559:17)
      at processTimers (node:internal/timers:502:7) {
    code: 'ETIMEOUT',
    isTransient: undefined
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-18 16:00:56

事实证明,脚本只是在完成之前就结束了。要解决这个问题,我不得不兑现诺言

代码语言:javascript
复制
exports.handler = async (event) => {

    const promise = new Promise(function(resolve, reject) {
        
        let sql = require('mssql');
        
        sql.connect(config, (err) => {
            if (err) {
                reject(err);
            }
            
            else {
                const request = new sql.Request();
                
                const query = "SELECT * FROM MyTable";
                request.query(query, (err, result) => {
                    if(err) {
                        reject(err);
                    }
                    
                    else {
                        resolve(result);
                    }
                });
            }
        });
    });
        
    return promise;
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73009045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档