从 Node JS 连接 Redshift 时无法返回任何值

Posted

技术标签:

【中文标题】从 Node JS 连接 Redshift 时无法返回任何值【英文标题】:Can't return any value while connecting Redshift from Node JS 【发布时间】:2021-06-22 08:39:44 【问题描述】:

下面的代码连接到Redshift数据库却返回一个空响应,即使响应会显示在console.log中,为什么?

index.js

   
const config = 
  user: 'user',
  database: 'database',
  password: 'password',
  port: port,
  host: 'hostname',
;
var response = [];
console.log('Before Connection');
exports.handler =  function index(event, context, callback) 
  var redshiftClient = new Redshift(config, rawConnection:true);
    redshiftClient.connect(function(err)
    console.log('After Connection');
    if(err) throw err;
    else
      redshiftClient.query('SELECT * FROM customer', raw: true, function(err, data)
        if(err) throw err;
        else
            response = data;
            console.log(data);
            redshiftClient.close();
            return response;
            
        
         
      );
    
  );
 
  return response;
;

【问题讨论】:

【参考方案1】:

我使用了 Promise 概念,它确实为我正确返回了响应。 示例 JSON "user_id": "1001"

var Redshift = require('node-redshift');
   
const config = 
  user: 'user',
  database: 'database',
  password: 'password',
  port: port,
  host: 'hostname',
;

// The values passed in to the options object will be the difference between a connection pool and raw connection
var redshiftClient = new Redshift(config, rawConnection:true);


exports.handler =  async (event) => 
return new Promise(function(resolve, reject)

redshiftClient.connect(function(err)
    if(err) throw err;
    else
      redshiftClient.parameterizedQuery('SELECT * FROM customer where user_id = $1', [event.user_id], raw: true, function(err, data)
        if(err) throw reject(err);
        else
          resolve(data);
          redshiftClient.close();
        
      );
    
  ); 
);

;

【讨论】:

以上是关于从 Node JS 连接 Redshift 时无法返回任何值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Node.js 连接到我的 redshift 集群?

使用 Node.js 从 Redshift 将数据复制到 postgres

尝试使用 node-redshift 从节点连接到 redshift 时超时

通过node js上传数据到redshift

从 Redshift 卸载到 S3 时 JDBC 连接丢失。应该发生啥?

当应用程序在本地运行时,Node.js 能够连接到 MySQL 容器,但当应用程序在容器中运行时无法连接