Using the AWS Advanced NodeJS Wrapper Clients
August 20, 2026 · View on GitHub
The AWS Advanced NodeJS Wrapper is a promise-based library that is compatible with the MySQL2 and Node-Postgres community drivers' promise-based APIs. Callback APIs from community drivers are not supported by the wrapper.
Callback APIs (Not Supported)
MySQL2 callback API (not supported):
// ❌ This will NOT work with AwsMySQLClient
import mysql from "mysql2";
const connection = mysql.createConnection({
/* config */
});
connection.query("SELECT NOW()", (error, results, fields) => {
if (error) throw error;
console.log(results[0]);
});
Node-Postgres callback API (not supported):
// ❌ This will NOT work with AwsPgClient
import { Client } from "pg";
const client = new Client({
/* config */
});
client.connect();
client.query("SELECT NOW()", (err, result) => {
if (err) throw err;
console.log(result.rows[0]);
});
Promise-Based APIs (Supported)
MySQL2 promise-based API:
import { createConnection } from "mysql2/promise";
const connection = await createConnection({
/* config */
});
const [rows] = await connection.query("SELECT NOW()");
console.log(rows[0]);
Node-Postgres promise-based API:
import { Client } from "pg";
const client = new Client({
/* config */
});
await client.connect();
const result = await client.query("SELECT NOW()");
console.log(result.rows[0]);
If your application is already using promise-based APIs, migrating from community drivers to the wrapper requires minimal modification to existing execution workflows. See the sections below for examples of how community driver APIs map to the wrapper APIs.
Warning
The imports and query parsing shown in these examples are only compatible with AWS Advanced NodeJS Wrapper versions 2.0.0 and above.
If you are using versions 1.3.0 and earlier, see the sample code from version 1.3.0.
MySQL2 Migration Guide
Creating a Client
mysql2:
import { createConnection } from "mysql2/promise";
const connection = await createConnection({
host: "cluster-endpoint",
user: "database-user",
password: "database-pwd",
database: "db",
port: 3306
});
AwsMySQLClient:
import { AwsMySQLClient } from "aws-advanced-nodejs-wrapper/mysql";
const client = new AwsMySQLClient({
host: "cluster-endpoint",
user: "database-user",
password: "database-pwd",
database: "db",
port: 3306
});
await client.connect();
Querying With the Client
Basic String Query
mysql2:
const [rows] = await connection.query("SELECT NOW()");
console.log(rows[0]); // { "NOW()": 2023-12-01T10:30:00.000Z }
AwsMySQLClient:
const [rows] = await client.query("SELECT NOW()");
console.log(rows[0]); // { "NOW()": 2023-12-01T10:30:00.000Z }
Parameterized Query
mysql2:
const [rows] = await connection.query("SELECT ? as name, ? as age", ["John", 25]);
console.log(rows[0]); // { name: "John", age: 25 }
console.log(rows[0].name); // "John"
console.log(rows[0].age); // 25
AwsMySQLClient:
const [rows] = await client.query("SELECT ? as name, ? as age", ["John", 25]);
console.log(rows[0]); // { name: "John", age: 25 }
console.log(rows[0].name); // "John"
console.log(rows[0].age); // 25
Query with Options Object
mysql2:
const [rows] = await connection.query({
sql: "SELECT ? as name, ? as age",
values: ["Jane", 30]
});
console.log(rows[0]); // { name: "Jane", age: 30 }
console.log(rows[0].name); // "Jane"
console.log(rows[0].age); // 30
AwsMySQLClient:
const [rows] = await client.query({
sql: "SELECT ? as name, ? as age",
values: ["Jane", 30]
});
console.log(rows[0]); // { name: "Jane", age: 30 }
console.log(rows[0].name); // "Jane"
console.log(rows[0].age); // 30
Prepared Statement
mysql2:
const [rows] = await connection.execute("SELECT ? as id, ? as status", [1, "active"]);
console.log(rows[0]); // { id: 1, status: "active" }
console.log(rows[0].id); // 1
console.log(rows[0].status); // "active"
AwsMySQLClient:
const [rows] = await client.execute("SELECT ? as id, ? as status", [1, "active"]);
console.log(rows[0]); // { id: 1, status: "active" }
console.log(rows[0].id); // 1
console.log(rows[0].status); // "active"
Node-Postgres Migration Guide
Note
The PostgreSQL client and its pooled connection type were renamed to AwsPgClient and AwsPgPooledConnection for
consistent casing. The previous names AwsPGClient and AwsPGPooledConnection are still exported as deprecated
aliases that behave identically, so existing code continues to work without changes. Prefer AwsPgClient in new
code; the deprecated aliases are scheduled for removal in the next major release.
Creating a Client
node-postgres:
import { Client } from "pg";
const client = new Client({
host: "cluster-endpoint",
user: "database-user",
password: "database-pwd",
database: "db",
port: 5432
});
await client.connect();
AwsPgClient:
import { AwsPgClient } from "aws-advanced-nodejs-wrapper/pg";
const client = new AwsPgClient({
host: "cluster-endpoint",
user: "database-user",
password: "database-pwd",
database: "db",
port: 5432
});
await client.connect();
Querying With the Client
Basic String Query
node-postgres:
const result = await client.query("SELECT NOW()");
console.log(result.rows[0]); // { now: 2023-12-01T10:30:00.000Z }
AwsPgClient:
const result = await client.query("SELECT NOW()");
console.log(result.rows[0]); // { now: 2023-12-01T10:30:00.000Z }
Parameterized Query
node-postgres:
const result = await client.query("SELECT \$1::text as name, \$2::int as age", ["John", 25]);
console.log(result.rows[0]); // { name: 'John', age: 25 }
AwsPgClient:
const result = await client.query("SELECT \$1::text as name, \$2::int as age", ["John", 25]);
console.log(result.rows[0]); // { name: 'John', age: 25 }
Query with Config Object
node-postgres:
const result = await client.query({
text: "SELECT \$1::text as name, \$2::int as age",
values: ["Jane", 30]
});
console.log(result.rows[0]); // { name: 'Jane', age: 30 }
AwsPgClient:
const result = await client.query({
text: "SELECT \$1::text as name, \$2::int as age",
values: ["Jane", 30]
});
console.log(result.rows[0]); // { name: 'Jane', age: 30 }
Array Row Mode
node-postgres:
const result = await client.query({
text: "SELECT \$1::int as id, \$2::text as status",
values: [1, "active"],
rowMode: "array"
});
console.log(result[0]); // [1, 'active']
AwsPgClient:
const result = await client.query({
text: "SELECT \$1::int as id, \$2::text as status",
values: [1, "active"],
rowMode: "array"
});
console.log(result[0]); // [1, 'active']
Named Prepared Statement
node-postgres:
const result = await client.query({
name: "fetch-data",
text: "SELECT \$1::int as id, \$2::text as name",
values: [1, "test"]
});
console.log(result.rows[0]); // { id: 1, name: 'test' }
AwsPgClient:
const result = await client.query({
name: "fetch-data",
text: "SELECT \$1::int as id, \$2::text as name",
values: [1, "test"]
});
console.log(result.rows[0]); // { id: 1, name: 'test' }
Sample Code
For sample JavaScript and TypeScript projects using the AWS Advanced NodeJS Wrapper, see the following directories: