Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
QLDBPilote Amazon pour Node.js — Tutoriel de démarrage rapide
Dans ce didacticiel, vous apprendrez à configurer une application simple à l'aide du QLDB pilote Amazon pour Node.js. Ce guide décrit les étapes d'installation du pilote, ainsi que des exemples abrégés JavaScript et TypeScript codés d'opérations de base de création, de lecture, de mise à jour et de suppression (CRUD). Pour des exemples plus détaillés illustrant ces opérations dans un exemple complet d'application, consultez leTutoriel Node.js.
Le cas échéant, certaines étapes comportent des exemples de code différents pour chaque version majeure prise en charge du QLDB pilote pour Node.js.
Prérequis
Avant de commencer, assurez-vous d'effectuer les opérations suivantes :
Si vous utilisez TypeScript, vous devez également suivre les étapes de configuration suivantes.
Pour installer TypeScript
-
Installez le TypeScript package. Le QLDB pilote fonctionne sous TypeScript 3.8.x.
$
npm install --global typescript@3.8.0
-
Une fois le package installé, exécutez la commande suivante pour vous assurer que le TypeScript compilateur est installé.
$
tsc --version
Pour exécuter le code dans les étapes suivantes, notez que vous devez d'abord transpiler votre TypeScript fichier en JavaScript code exécutable, comme suit.
$
tsc app.ts; node app.js
Étape 1 : Configurer votre projet
Configurez d'abord votre projet Node.js.
-
Créez un dossier pour votre application.
$
mkdir myproject
$
cd myproject
-
Pour initialiser votre projet, entrez la npm
commande suivante et répondez aux questions posées lors de la configuration. Vous pouvez utiliser les valeurs par défaut pour la plupart des questions.
$
npm init
-
Installez le QLDB pilote Amazon pour Node.js.
-
Utilisation de la version 3.x
$
npm install amazon-qldb-driver-nodejs --save
-
Utilisation de la version 2.x
$
npm install amazon-qldb-driver-nodejs@2.2.0 --save
-
Utilisation de la version 1.x
$
npm install amazon-qldb-driver-nodejs@1.0.0 --save
-
Installez les dépendances homologues du pilote.
-
Utilisation de la version 3.x
$
npm install @aws-sdk/client-qldb-session --save
$
npm install ion-js --save
$
npm install jsbi --save
-
Utilisation de la version 2.x ou 1.x
$
npm install aws-sdk --save
$
npm install ion-js@4.0.0 --save
$
npm install jsbi@3.1.1 --save
-
Créez un nouveau fichier nommé app.js
pour JavaScript ou app.ts
pour TypeScript.
Ajoutez ensuite progressivement les exemples de code dans les étapes suivantes pour essayer certaines CRUD opérations de base. Vous pouvez également ignorer le step-by-step didacticiel et exécuter l'application complète à la place.
Étape 2 : Initialisation du pilote
Initialisez une instance du pilote qui se connecte au registre nommé. quick-start
Ajoutez le code suivant à votre app.ts
fichier app.js
or.
- JavaScript
-
var qldb = require('amazon-qldb-driver-nodejs');
var https = require('https');
function main() {
const maxConcurrentTransactions = 10;
const retryLimit = 4;
const agentForQldb = new https.Agent({
maxSockets: maxConcurrentTransactions
});
const lowLevelClientHttpOptions = {
httpAgent: agentForQldb
}
const serviceConfigurationOptions = {
region: "us-east-1
"
};
// Use driver's default backoff function for this example (no second parameter provided to RetryConfig)
var retryConfig = new qldb.RetryConfig(retryLimit);
var driver = new qldb.QldbDriver("quick-start", serviceConfigurationOptions, lowlevelClientHttpOptions, maxConcurrentTransactions, retryConfig);
}
main();
- TypeScript
-
import { Agent } from "https";
import { NodeHttpHandlerOptions } from "@aws-sdk/node-http-handler";
import { QLDBSessionClientConfig } from "@aws-sdk/client-qldb-session";
import { QldbDriver, RetryConfig } from "amazon-qldb-driver-nodejs";
function main(): void {
const maxConcurrentTransactions: number = 10;
const agentForQldb: Agent = new Agent({
maxSockets: maxConcurrentTransactions
});
const lowLevelClientHttpOptions: NodeHttpHandlerOptions = {
httpAgent: agentForQldb
};
const serviceConfigurationOptions: QLDBSessionClientConfig = {
region: "us-east-1
"
};
const retryLimit: number = 4;
// Use driver's default backoff function for this example (no second parameter provided to RetryConfig)
const retryConfig: RetryConfig = new RetryConfig(retryLimit);
const driver: QldbDriver = new QldbDriver("quick-start", serviceConfigurationOptions, lowLevelClientHttpOptions, maxConcurrentTransactions, retryConfig);
}
if (require.main === module) {
main();
}
-
Dans cet exemple de code, remplacez us-east-1
avec l' Région AWS endroit où vous avez créé votre registre.
-
Pour des raisons de simplicité, les autres exemples de code de ce guide utilisent un pilote avec des paramètres par défaut, comme indiqué dans l'exemple suivant pour la version 1.x. Vous pouvez également utiliser votre propre instance de pilote avec une instance personnalisée à la RetryConfig
place.
- JavaScript
-
var qldb = require('amazon-qldb-driver-nodejs');
var https = require('https');
function main() {
var maxConcurrentTransactions = 10;
var retryLimit = 4;
var agentForQldb = new https.Agent({
keepAlive: true,
maxSockets: maxConcurrentTransactions
});
var serviceConfigurationOptions = {
region: "us-east-1
",
httpOptions: {
agent: agentForQldb
}
};
// Use driver's default backoff function for this example (no second parameter provided to RetryConfig)
var retryConfig = new qldb.RetryConfig(retryLimit);
var driver = new qldb.QldbDriver("quick-start", serviceConfigurationOptions, maxConcurrentTransactions, retryConfig);
}
main();
- TypeScript
-
import { QldbDriver, RetryConfig } from "amazon-qldb-driver-nodejs";
import { ClientConfiguration } from "aws-sdk/clients/acm";
import { Agent } from "https";
function main(): void {
const maxConcurrentTransactions: number = 10;
const agentForQldb: Agent = new Agent({
keepAlive: true,
maxSockets: maxConcurrentTransactions
});
const serviceConfigurationOptions: ClientConfiguration = {
region: "us-east-1
",
httpOptions: {
agent: agentForQldb
}
};
const retryLimit: number = 4;
// Use driver's default backoff function for this example (no second parameter provided to RetryConfig)
const retryConfig: RetryConfig = new RetryConfig(retryLimit);
const driver: QldbDriver = new QldbDriver("quick-start", serviceConfigurationOptions, maxConcurrentTransactions, retryConfig);
}
if (require.main === module) {
main();
}
-
Dans cet exemple de code, remplacez us-east-1
avec l' Région AWS endroit où vous avez créé votre registre.
-
La version 2.x introduit le nouveau paramètre optionnel RetryConfig
pour l'initialisationQldbDriver
.
-
Pour des raisons de simplicité, les autres exemples de code de ce guide utilisent un pilote avec des paramètres par défaut, comme indiqué dans l'exemple suivant pour la version 1.x. Vous pouvez également utiliser votre propre instance de pilote avec une instance personnalisée à la RetryConfig
place.
-
Cet exemple de code initialise un pilote qui réutilise les connexions existantes en définissant les options keep-alive. Pour en savoir plus, consultez Recommandations de configuration le pilote Node.js.
- JavaScript
-
const qldb = require('amazon-qldb-driver-nodejs');
function main() {
// Use default settings
const driver = new qldb.QldbDriver("quick-start");
}
main();
- TypeScript
-
import { QldbDriver } from "amazon-qldb-driver-nodejs";
function main(): void {
// Use default settings
const driver: QldbDriver = new QldbDriver("quick-start");
}
if (require.main === module) {
main();
}
Vous pouvez définir la variable d'AWS_REGION
environnement pour spécifier la région. Pour plus d'informations, consultez la section Configuration du Région AWS dans le guide du AWS SDK for JavaScript développeur.
Étape 3 : Création d'une table et d'un index
Les exemples de code suivants montrent comment exécuter CREATE TABLE
des CREATE
INDEX
instructions.
-
Ajoutez la fonction suivante qui crée une table nomméePeople
.
- JavaScript
-
async function createTable(txn) {
await txn.execute("CREATE TABLE People");
}
- TypeScript
-
async function createTable(txn: TransactionExecutor): Promise<void> {
await txn.execute("CREATE TABLE People");
}
-
Ajoutez la fonction suivante qui crée un index pour le firstName
champ de la People
table. Les index sont nécessaires pour optimiser les performances des requêtes et aider à limiter les exceptions de conflit optimistes en matière de contrôle de simultanéité (OCC).
- JavaScript
-
async function createIndex(txn) {
await txn.execute("CREATE INDEX ON People (firstName)");
}
- TypeScript
-
async function createIndex(txn: TransactionExecutor): Promise<void> {
await txn.execute("CREATE INDEX ON People (firstName)");
}
-
Dans la main
fonction, vous appelez d'abordcreateTable
, puis vous appelezcreateIndex
.
- JavaScript
-
const qldb = require('amazon-qldb-driver-nodejs');
async function main() {
// Use default settings
const driver = new qldb.QldbDriver("quick-start");
await driver.executeLambda(async (txn) => {
console.log("Create table People");
await createTable(txn);
console.log("Create index on firstName");
await createIndex(txn);
});
driver.close();
}
main();
- TypeScript
-
import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs";
async function main(): Promise<void> {
// Use default settings
const driver: QldbDriver = new QldbDriver("quick-start");
await driver.executeLambda(async (txn: TransactionExecutor) => {
console.log("Create table People");
await createTable(txn);
console.log("Create index on firstName");
await createIndex(txn);
});
driver.close();
}
if (require.main === module) {
main();
}
-
Exécutez le code pour créer la table et l'index.
- JavaScript
-
$
node app.js
- TypeScript
-
$
tsc app.ts; node app.js
Étape 4 : Insérer un document
L'exemple de code suivant montre comment exécuter une INSERT
instruction. QLDBprend en charge le langage de requête partiQL (SQLcompatible) et le format de données Amazon Ion (surensemble de). JSON
-
Ajoutez la fonction suivante qui insère un document dans le People
tableau.
- JavaScript
-
async function insertDocument(txn) {
const person = {
firstName: "John",
lastName: "Doe",
age: 42
};
await txn.execute("INSERT INTO People ?", person);
}
- TypeScript
-
async function insertDocument(txn: TransactionExecutor): Promise<void> {
const person: Record<string, any> = {
firstName: "John",
lastName: "Doe",
age: 42
};
await txn.execute("INSERT INTO People ?", person);
}
Cet exemple utilise un point d'interrogation (?
) comme espace réservé aux variables pour transmettre les informations du document à l'instruction. La execute
méthode prend en charge les valeurs des types Amazon Ion et des types natifs Node.js.
Pour insérer plusieurs documents en utilisant une seule INSERT instruction, vous pouvez transmettre un paramètre de type list à l'instruction comme suit.
// people is a list
txn.execute("INSERT INTO People ?", people);
Vous ne placez pas la variable placeholder (?
) entre crochets (<<...>>
) lorsque vous transmettez une liste. Dans les instructions partiQL manuelles, les crochets à double angle indiquent une collection non ordonnée appelée sac.
-
Dans la main
fonction, supprimez les createIndex
appels createTable
et et ajoutez un appel àinsertDocument
.
- JavaScript
-
const qldb = require('amazon-qldb-driver-nodejs');
async function main() {
// Use default settings
const driver = new qldb.QldbDriver("quick-start");
await driver.executeLambda(async (txn) => {
console.log("Insert document");
await insertDocument(txn);
});
driver.close();
}
main();
- TypeScript
-
import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs";
async function main(): Promise<void> {
// Use default settings
const driver: QldbDriver = new QldbDriver("quick-start");
await driver.executeLambda(async (txn: TransactionExecutor) => {
console.log("Insert document");
await insertDocument(txn);
});
driver.close();
}
if (require.main === module) {
main();
}
Étape 5 : Interrogez le document
L'exemple de code suivant montre comment exécuter une SELECT
instruction.
-
Ajoutez la fonction suivante qui interroge un document à partir de la People
table.
- JavaScript
-
async function fetchDocuments(txn) {
return await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John");
}
- TypeScript
-
async function fetchDocuments(txn: TransactionExecutor): Promise<dom.Value[]> {
return (await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John")).getResultList();
}
-
Dans la main
fonction, ajoutez l'appel suivant à fetchDocuments
après l'appel àinsertDocument
.
- JavaScript
-
const qldb = require('amazon-qldb-driver-nodejs');
async function main() {
// Use default settings
const driver = new qldb.QldbDriver("quick-start");
var resultList = await driver.executeLambda(async (txn) => {
console.log("Insert document");
await insertDocument(txn);
console.log("Fetch document");
var result = await fetchDocuments(txn);
return result.getResultList();
});
// Pretty print the result list
console.log("The result List is ", JSON.stringify(resultList, null, 2));
driver.close();
}
main();
- TypeScript
-
import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs";
import { dom } from "ion-js";
async function main(): Promise<void> {
// Use default settings
const driver: QldbDriver = new QldbDriver("quick-start");
const resultList: dom.Value[] = await driver.executeLambda(async (txn: TransactionExecutor) => {
console.log("Insert document");
await insertDocument(txn);
console.log("Fetch document");
return await fetchDocuments(txn);
});
// Pretty print the result list
console.log("The result List is ", JSON.stringify(resultList, null, 2));
driver.close();
}
if (require.main === module) {
main();
}
Étape 6 : Mettre à jour le document
L'exemple de code suivant montre comment exécuter une UPDATE
instruction.
-
Ajoutez la fonction suivante qui met à jour un document dans le People
tableau en le remplaçant lastName
par"Stiles"
.
- JavaScript
-
async function updateDocuments(txn) {
await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John");
}
- TypeScript
-
async function updateDocuments(txn: TransactionExecutor): Promise<void> {
await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John");
}
-
Dans la main
fonction, ajoutez l'appel suivant à updateDocuments
après l'appel àfetchDocuments
. Ensuite, appelez à fetchDocuments
nouveau pour voir les résultats mis à jour.
- JavaScript
-
const qldb = require('amazon-qldb-driver-nodejs');
async function main() {
// Use default settings
const driver = new qldb.QldbDriver("quick-start");
var resultList = await driver.executeLambda(async (txn) => {
console.log("Insert document");
await insertDocument(txn);
console.log("Fetch document");
await fetchDocuments(txn);
console.log("Update document");
await updateDocuments(txn);
console.log("Fetch document after update");
var result = await fetchDocuments(txn);
return result.getResultList();
});
// Pretty print the result list
console.log("The result List is ", JSON.stringify(resultList, null, 2));
driver.close();
}
main();
- TypeScript
-
import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs";
import { dom } from "ion-js";
async function main(): Promise<void> {
// Use default settings
const driver: QldbDriver = new QldbDriver("quick-start");
const resultList: dom.Value[] = await driver.executeLambda(async (txn: TransactionExecutor) => {
console.log("Insert document");
await insertDocument(txn);
console.log("Fetch document");
await fetchDocuments(txn);
console.log("Update document");
await updateDocuments(txn);
console.log("Fetch document after update");
return await fetchDocuments(txn);
});
// Pretty print the result list
console.log("The result List is ", JSON.stringify(resultList, null, 2));
driver.close();
}
if (require.main === module) {
main();
}
-
Exécutez le code pour insérer, interroger et mettre à jour un document.
- JavaScript
-
$
node app.js
- TypeScript
-
$
tsc app.ts; node app.js
Exécution de l'application complète
Les exemples de code suivants sont les versions complètes de app.js
etapp.ts
. Au lieu d'effectuer les étapes précédentes individuellement, vous pouvez également exécuter ce code du début à la fin. Cette application montre certaines CRUD opérations de base sur le registre nomméquick-start
.
Avant d'exécuter ce code, assurez-vous qu'aucune table active n'est déjà nommée People
dans le quick-start
registre.
- JavaScript
-
const qldb = require('amazon-qldb-driver-nodejs');
async function createTable(txn) {
await txn.execute("CREATE TABLE People");
}
async function createIndex(txn) {
await txn.execute("CREATE INDEX ON People (firstName)");
}
async function insertDocument(txn) {
const person = {
firstName: "John",
lastName: "Doe",
age: 42
};
await txn.execute("INSERT INTO People ?", person);
}
async function fetchDocuments(txn) {
return await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John");
}
async function updateDocuments(txn) {
await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John");
}
async function main() {
// Use default settings
const driver = new qldb.QldbDriver("quick-start");
var resultList = await driver.executeLambda(async (txn) => {
console.log("Create table People");
await createTable(txn);
console.log("Create index on firstName");
await createIndex(txn);
console.log("Insert document");
await insertDocument(txn);
console.log("Fetch document");
await fetchDocuments(txn);
console.log("Update document");
await updateDocuments(txn);
console.log("Fetch document after update");
var result = await fetchDocuments(txn);
return result.getResultList();
});
// Pretty print the result list
console.log("The result List is ", JSON.stringify(resultList, null, 2));
driver.close();
}
main();
- TypeScript
-
import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs";
import { dom } from "ion-js";
async function createTable(txn: TransactionExecutor): Promise<void> {
await txn.execute("CREATE TABLE People");
}
async function createIndex(txn: TransactionExecutor): Promise<void> {
await txn.execute("CREATE INDEX ON People (firstName)");
}
async function insertDocument(txn: TransactionExecutor): Promise<void> {
const person: Record<string, any> = {
firstName: "John",
lastName: "Doe",
age: 42
};
await txn.execute("INSERT INTO People ?", person);
}
async function fetchDocuments(txn: TransactionExecutor): Promise<dom.Value[]> {
return (await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John")).getResultList();
}
async function updateDocuments(txn: TransactionExecutor): Promise<void> {
await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John");
};
async function main(): Promise<void> {
// Use default settings
const driver: QldbDriver = new QldbDriver("quick-start");
const resultList: dom.Value[] = await driver.executeLambda(async (txn: TransactionExecutor) => {
console.log("Create table People");
await createTable(txn);
console.log("Create index on firstName");
await createIndex(txn);
console.log("Insert document");
await insertDocument(txn);
console.log("Fetch document");
await fetchDocuments(txn);
console.log("Update document");
await updateDocuments(txn);
console.log("Fetch document after update");
return await fetchDocuments(txn);
});
// Pretty print the result list
console.log("The result List is ", JSON.stringify(resultList, null, 2));
driver.close();
}
if (require.main === module) {
main();
}
Pour exécuter l'application complète, entrez la commande suivante.
- JavaScript
-
$
node app.js
- TypeScript
-
$
tsc app.ts; node app.js