Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Driver Amazon QLDB per Node.js — Tutorial di avvio rapido
In questo tutorial, imparerai come configurare un'applicazione semplice utilizzando il driver Amazon QLDB per Node.js. Questa guida include passaggi per l'installazione del driver JavaScript TypeScript ed esempi di creazione, lettura, aggiornamento ed eliminazione CRUD. Per esempi più approfonditi che dimostrano queste operazioni in un'applicazione di esempio completa, consulta ilTutorial su Node.js.
Ove applicabile, alcuni passaggi hanno esempi di codice diversi per ciascuna versione principale supportata del driver QLDB per Node.js.
Prerequisiti
Prima di iniziare, eseguire la seguente procedura:
Se si utilizza TypeScript, è necessario eseguire anche i seguenti passaggi di configurazione.
Da installare TypeScript
-
Installare il TypeScript pacchetto. Il driver QLDB viene eseguito su TypeScript 3.8.x.
$
npm install --global typescript@3.8.0
-
Dopo aver installato il pacchetto, eseguire il seguente comando per assicurarsi che il TypeScript compilatore sia installato.
$
tsc --version
Per eseguire il codice nei passaggi seguenti, tieni presente che devi prima traspilare il TypeScript file in JavaScript codice eseguibile, come segue.
$
tsc app.ts; node app.js
Fase 1: Configurazione del progetto
In primo luogo, configura il tuo progetto Node.js.
-
Crea una cartella per la tua applicazione.
$
mkdir myproject
$
cd myproject
-
Per inizializzare il progetto, inserisci il seguentenpm
comando e rispondi alle domande che vengono poste durante la configurazione. Puoi usare i valori predefiniti per la maggior parte delle domande.
$
npm init
-
Installa il driver Amazon QLDB per Node.js.
-
Utilizzo della versione 3.x
$
npm install amazon-qldb-driver-nodejs --save
-
Utilizzo della versione 2.x
$
npm install amazon-qldb-driver-nodejs@2.2.0 --save
-
Utilizzo della versione 1.x
$
npm install amazon-qldb-driver-nodejs@1.0.0 --save
-
Installa le dipendenze peer del driver.
-
Utilizzo della versione 3.x
$
npm install @aws-sdk/client-qldb-session --save
$
npm install ion-js --save
$
npm install jsbi --save
-
Utilizzo della versione 2.x o 1.x
$
npm install aws-sdk --save
$
npm install ion-js@4.0.0 --save
$
npm install jsbi@3.1.1 --save
-
Crea un nuovo file denominatoapp.js
per JavaScript, oapp.ts
per TypeScript.
Quindi, aggiungi in modo incrementale gli esempi di codice nei passaggi seguenti per provare alcune operazioni CRUD di base. In alternativa, puoi saltare il step-by-step tutorial ed eseguire invece l'applicazione completa.
Fase 2: Inizializzazione del driver
Inizializza un'istanza del driver che si connette al registro denominatoquick-start
. Aggiungi il seguente codice al tuoapp.ts
fileapp.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();
}
-
In questo esempio di codice, sostituisci us-east-1
con ilRegione AWS luogo in cui hai creato il tuo libro mastro.
-
Per semplicità, gli altri esempi di codice in questa guida utilizzano un driver con impostazioni predefinite, come specificato nell'esempio seguente per la versione 1.x. Puoi anche utilizzare la tua istanza del driver con unaRetryConfig
personalizzata.
- 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();
}
-
In questo esempio di codice, sostituisci us-east-1
con ilRegione AWS luogo in cui hai creato il tuo libro mastro.
-
La versione 2.x introduce il nuovo parametro opzionaleRetryConfig
per l'inizializzazioneQldbDriver
.
-
Per semplicità, gli altri esempi di codice in questa guida utilizzano un driver con impostazioni predefinite, come specificato nell'esempio seguente per la versione 1.x. Puoi anche utilizzare la tua istanza del driver con unaRetryConfig
personalizzata.
-
Questo esempio di codice inizializza un driver che riutilizza le connessioni esistenti impostando le opzioni keep-alive. Per ulteriori informazioni, consultaConsigli di configurazione il driver 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();
}
È possibile impostare la variabile diAWS_REGION
ambiente per specificare la regione. Per ulteriori informazioni, consulta Impostare ilRegione AWS nella Guida per gliAWS SDK for JavaScript sviluppatori.
Fase 3: Creare una tabella e un indice
Gli esempi di codice seguenti mostrano come eseguireCREATE
INDEX
istruzioniCREATE TABLE
e.
-
Aggiungete la seguente funzione che crea una tabella denominataPeople
.
- 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");
}
-
Aggiungi la seguente funzione che crea un indice per ilfirstName
campo dellaPeople
tabella. Gli indici sono necessari per ottimizzare le prestazioni delle query e contribuire a limitare le eccezioni di conflitto OCC (Optimistic Concurrency Control).
- 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)");
}
-
Nellamain
funzione, primacreateTable
chiami e poi chiamicreateIndex
.
- 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();
}
-
Esegui il codice per creare la tabella e l'indice.
- JavaScript
-
$
node app.js
- TypeScript
-
$
tsc app.ts; node app.js
Fase 4: Inserimento di un documento
L'esempio di codice seguente mostra come eseguire un'INSERT
istruzione. QLDB supporta il linguaggio di interrogazione PartiQL (compatibile con SQL) e il formato dati Amazon Ion (superset di JSON).
-
Aggiungete la seguente funzione che inserisce un documento nellaPeople
tabella.
- 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);
}
Questo esempio utilizza un punto interrogativo (?
) come segnaposto variabile per passare le informazioni del documento alla dichiarazione. Ilexecute
metodo supporta valori sia nei tipi Amazon Ion che nei tipi nativi Node.js.
Per inserire più documenti utilizzando una singolaINSERT istruzione, è possibile passare un elenco di parametri di tipo all'istruzione come segue.
// people is a list
txn.execute("INSERT INTO People ?", people);
Non si racchiude la variabile placeholder (?
) tra parentesi a doppio angolo (<<...>>
) quando si passa un elenco. Nelle istruzioni PartiQL, le parentesi a doppio angolo indicano una raccolta non ordinata nota come borsa.
-
Nellamain
funzione, rimuovicreateIndex
le chiamatecreateTable
e e aggiungi una chiamata ainsertDocument
.
- 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();
}
Fase 5: esegui query sul documento
L'esempio di codice seguente mostra come eseguire un'SELECT
istruzione.
-
Aggiungete la seguente funzione che interroga un documento dallaPeople
tabella.
- 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();
}
-
Nellamain
funzione, aggiungi la seguente chiamata afetchDocuments
dopo la chiamata ainsertDocument
.
- 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();
}
Fase 6: Aggiornamento del documento
L'esempio di codice seguente mostra come eseguire un'UPDATE
istruzione.
-
Aggiungete la seguente funzione che aggiorna un documento nellaPeople
tabella passandolastName
a"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");
}
-
Nellamain
funzione, aggiungi la seguente chiamata aupdateDocuments
dopo la chiamata afetchDocuments
. Quindi, chiamafetchDocuments
di nuovo per vedere i risultati aggiornati.
- 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();
}
-
Esegui il codice per inserire, interrogare e aggiornare un documento.
- JavaScript
-
$
node app.js
- TypeScript
-
$
tsc app.ts; node app.js
Esecuzione dell'applicazione completa
I seguenti esempi di codice sono le versioni complete diapp.js
eapp.ts
. Invece di eseguire i passaggi precedenti singolarmente, puoi anche eseguire questo codice dall'inizio alla fine. Questa applicazione dimostra alcune operazioni CRUD di base sul registro denominatoquick-start
.
Prima di eseguire questo codice, assicuratevi di non avere già una tabella attiva denominataPeople
nelquick-start
libro mastro.
- 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();
}
Per eseguire l'applicazione completa, immetti il seguente comando.
- JavaScript
-
$
node app.js
- TypeScript
-
$
tsc app.ts; node app.js