【问题标题】:How to read from postgresql script in node.js如何从 node.js 中的 postgresql 脚本中读取
【发布时间】:2021-09-14 03:47:48
【问题描述】:

我使用 pg 模块将 postgres 数据库连接到 node.js 项目。

const pg = require('pg')
const pool = pg.Pool(
{
  "user":"postgres",
  "password":"password",
  "host": "localhost",
  "db" : "db1"
});

pool.connect();

pool.on('connect',(client)=>
{
client.query("insert into table1(id, name) values(1, "item1")")
   client.query("select * from table 1",(err, res)=>{
     if( err) throw err;
     console.log(res);
   });
}
)

我的 sql 代码在一个名为 script.sql 的文件中。我的代码与上面非常相似,我想从 script.sql 文件中读取,而不是将 sql 代码放入查询函数中,例如 client.query("insert into table1(id, name) values(1, 'item1') ") 。有没有办法在 pg 模块中做到这一点,或者你有没有建议一种有效的方法来从 node-postgres 中的脚本中读取。

【问题讨论】:

  • “从脚本中读取”是什么意思
  • 可以将文件读入变量。可以在服务器启动前使用readFileSync,也可以在服务器启动后使用readFile

标签: javascript node.js database postgresql


【解决方案1】:

你要么synchronously read服务器启动前的文件(readFileSync阻塞服务器):

const pg = require('pg');
const { readFileSync } = require('fs');

const sqlInsert = readFileSync('insert.sql');
const sqlSelect = readFileSync('select.sql');

const pool = pg.Pool({
  "user":"postgres",
  "password":"password",
  "host": "localhost",
  "db" : "db1"
});

pool.connect();

pool.on('connect', client => {
  client.query(sqlInsert);
  client.query(sqlSelect, (err, res) => {
    if (err) throw err;
    console.log(res);
  });
});

asynchronously read服务器启动后的文件:

const pg = require('pg');
const { readFile } = require('fs');

const pool = pg.Pool({
  "user":"postgres",
  "password":"password",
  "host": "localhost",
  "db" : "db1"
});

pool.connect();

pool.on('connect', client => {
  readFile('insert.sql', sqlInsert => {
    client.query(sqlInsert);
  });
  readFile('select.sql', sqlSelect => {
    client.query(sqlSelect, (err, res) => {
      if (err) throw err;
      console.log(res);
    });
  });
});

您也可以使用promise-based operations 代替基于回调的操作:

const pg = require('pg');
const { readFile } = require('fs/promises');

const pool = pg.Pool({
  "user":"postgres",
  "password":"password",
  "host": "localhost",
  "db" : "db1"
});

pool.connect();

pool.on('connect', async client => {
  await sqlInsert = readFile('insert.sql');
  client.query(sqlInsert);
  await sqlInsert = readFile('select.sql')
  client.query(sqlSelect, (err, res) => {
    if (err) throw err;
    console.log(res);
  });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2021-11-25
    • 2019-09-13
    • 2013-07-16
    • 2021-07-21
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多