javascript - 如何从 NodeJS 连接到 PostgreSQL

标签 javascript node.js postgresql

我正在尝试连接到 PostgreSQL 数据库并进行一些查询。尽管我已经阅读了这里的一些主题、文档和其他博客,但我无法使其正常工作。

我的函数如下所示:

const postgreSQL = require('pg');

const config = {
  host: 'host',
  database: 'db',
  user: 'user',
  password: 'pass',
  port: 0000,
  max: 5, // max number of clients in the pool
  idleTimeoutMillis: 30000
};
let pool = new postgreSQL.Pool(config);

//.........other code.........

function CheckGeometryType(pool, tableName, column) {

  const schema = 'schema';
  let geometryValue = undefined;
  pool.connect(function(err, client, done) {
    client.query(`SELECT ST_GeometryType(${column})
                  AS geometryType FROM ${schema}.${tableName} LIMIT 1`);
    done(err);
    if (err) {
      console.log('Something went wrong. ' + err);
    }
    console.log("Result: " + queryResult.rows[0]);
    switch (queryResult) {
      // do things with result
    }
    done();
  });

  return geometryValue;
}

我尝试在 SWITCHdone() 之后/之前执行 console.log(),但事实并非如此被执行。我已经打印了在 pgAdmin 上传递给 pool.query 的字符串上形成的所有 SQL 查询,所有这些都有效并返回我想要获得的预期值。

我做错了什么?

谢谢!

--- 编辑 ---

感谢您的回答,但我仍然无法使其工作。我已经尝试了两种方法,但都不起作用。看着Documentation我正在尝试这个方法。

代码是:

let client = new Client(connectionString);
client.connect();
const query = client.query(new Query('SELECT ST_GeometryType($1) FROM $2.$3 LIMIT 1', [column, schema, tableName]));
console.log(JSON.stringify(query, null, 2)); //Debug purposes
query.on('row', (row) => {
    switch (row[0]) {
        case 'ST_LineString':
            geometryValue = 'LineString';
            break;
        case 'ST_MultiLineString':
            geometryValue = 'MultiLineString';
            break;
        case 'ST_Polygon':
            geometryValue = 'Polygon';
            break;
        case 'ST_MultiPolygon':
            geometryValue = 'MultiPolygon';
            break;
        case 'ST_Point':
            geometryValue = 'Point';
            break;
        case 'ST_MultiPoint':
            geometryValue = 'MultiPoint';
            break;
        default:
            break;
    }
});
query.on('end', (res) => {
    if(result.rows[0] === undefined){
        console.log('No data retrieved from DB');
    }
    client.end();
});
query.on('error', (res) => {
    console.log("Something went wrong: " + res);
});

调试,我可以看到在查询上,值存储得很好:

{
  "text": "SELECT ST_GeometryType($1) FROM $2.$3 LIMIT 1",
  "values": [
    "column",
    "schema",
    "table"
  ],
  "portal": "",
  "_result": {
    "command": null,
    "rowCount": null,
    "oid": null,
    "rows": [],
    "fields": [],
    "_parsers": [],
    "RowCtor": null,
    "rowAsArray": false
  },
  "_results": {
    "command": null,
    "rowCount": null,
    "oid": null,
    "rows": [],
    "fields": [],
    "_parsers": [],
    "RowCtor": null,
    "rowAsArray": false
  },
  "isPreparedStatement": false,
  "_canceledDueToError": false,
  "_promise": null,
  "domain": null,
  "_events": {},
  "_eventsCount": 0
}

我已经在 pgAdmin 上执行了查询,工作正常,返回了我期望的结果,但似乎尝试在脚本上执行查询不起作用。

我缺少什么?谢谢。

最佳答案

您还可以将原始访问与“pg”包一起使用:

pg.connect(connectionString, function (err, client, done) {
  if (err) {
    return handleErrors(done, err, res);
  }
  return client.query("UPDATE tab SET v1=($1)  WHERE k1=($2)", [value, key], 
    function (err, result) {
     return reloadData(res, client, done, err);
  });
});

关于javascript - 如何从 NodeJS 连接到 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50061095/

相关文章:

javascript - Bootstrap 日期选择器弹出窗口未显示突出显示的当前日期

javascript - 如何在jquery中动态打印id

javascript - "the angularjs way"是什么来应用顺序效果?

node.js - index.jade 没有出现在本地主机上

regexp_replace 替换字符串的错误部分

Javascript 切换情况 1、情况 2 以及情况 1 和 2

node.js - 如何使用适用于 Node.js 的 bot builder sdk 在打字栏中添加“开始”按钮

javascript - 如何从 babel-core 中获取转译后的字符串?

json - Postgresql group by 查询转换json格式

python - GeoDjango--Python :Can't Display Map