首页 > 解决方案 > 将编码 PostgreSQL 函数与 pg node.js 模块一起使用

问题描述

我正在尝试编写一个查询,将用户连同加盐哈希密码一起插入到我的表中。我用来从 postgresql 的命令行执行此操作的查询如下:

INSERT INTO users (name, email, password, salt) VALUES (someName, someEmail, encode(sha256(CONCAT('somePw','mySalt')::bytea), 'base64'), 'mySalt');

这工作得很好。现在我正在尝试使用 pg 模块从 node.js 调用此查询,但它不起作用。当我执行以下操作时(因此将查询用双引号“”括起来,这样我就可以将 base64 关键字括在单引号 '' 中),我得到一个错误:


const pg = require('pg');
const Pool = pg.Pool;
const pool = new Pool({
    user: 'foo',
    host: 'localhost',
    database: 'bar',
    password: 'password',
    port: 5432,
});

pool.query("INSERT INTO users (name, email, password, salt) VALUES ($1, $2, encode(sha256(CONCAT($3,$4)::bytea), 'base64'), $4) ", [name.toString(), email.toString(), password.toString(), getSalt().toString()], (error, results) => {
        if (error) {
            throw error
        }
}


// error: could not determine data type of parameter $4

所以我尝试对查询使用单引号 '' 并为 base64 关键字使用转义版本(''),但这也不起作用并给出相同的错误:



pool.query('INSERT INTO users (name, email, password, salt) VALUES ($1, $2, encode(sha256(CONCAT($3,$4)::bytea), \'base64\'), $4) ', [name.toString(), email.toString(), password.toString(), getSalt().toString()], (error, results) => {
        if (error) {
            throw error
        }
}


// error: could not determine data type of parameter $4

将 base64 关键字放在不带引号中也不起作用,这会产生错误

Error: column "base64" does not exist

有谁知道在 pg 中提出这个查询的正确方法是什么?谢谢!

标签: javascriptsqlnode.jspostgresql

解决方案


推荐阅读