Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
QLDBDriver Amazon untuk Node.js - Tutorial mulai cepat
Dalam tutorial ini, Anda belajar cara mengatur aplikasi sederhana menggunakan QLDB driver Amazon untuk Node.js. Panduan ini mencakup langkah-langkah untuk menginstal driver, dan contoh singkat JavaScript dan TypeScript kode dari dasar membuat, membaca, memperbarui, dan menghapus (CRUD) operasi. Untuk contoh lebih mendalam yang menunjukkan operasi ini dalam aplikasi sampel lengkap, lihat. Tutorial Node.js
Jika berlaku, beberapa langkah memiliki contoh kode yang berbeda untuk setiap versi utama QLDB driver yang didukung untuk Node.js.
Prasyarat
Sebelum memulai, pastikan Anda melakukan hal berikut:
Jika Anda menggunakan TypeScript, Anda juga harus melakukan langkah-langkah pengaturan berikut.
Untuk menginstal TypeScript
-
Instal TypeScript paket. QLDBDriver berjalan pada TypeScript 3.8.x.
$
npm install --global typescript@3.8.0
-
Setelah paket diinstal, jalankan perintah berikut untuk memastikan bahwa TypeScript compiler diinstal.
$
tsc --version
Untuk menjalankan kode dalam langkah-langkah berikut, perhatikan bahwa Anda harus terlebih dahulu mentranspile TypeScript file Anda ke JavaScript kode yang dapat dieksekusi, sebagai berikut.
$
tsc app.ts; node app.js
Langkah 1: Siapkan proyek Anda
Pertama, siapkan proyek Node.js Anda.
-
Buat folder untuk aplikasi Anda.
$
mkdir myproject
$
cd myproject
-
Untuk menginisialisasi proyek Anda, masukkan npm
perintah berikut dan jawab pertanyaan yang diajukan selama penyiapan. Anda dapat menggunakan default untuk sebagian besar pertanyaan.
$
npm init
-
Instal QLDB driver Amazon untuk Node.js.
-
Menggunakan versi 3.x
$
npm install amazon-qldb-driver-nodejs --save
-
Menggunakan versi 2.x
$
npm install amazon-qldb-driver-nodejs@2.2.0 --save
-
Menggunakan versi 1.x
$
npm install amazon-qldb-driver-nodejs@1.0.0 --save
-
Instal dependensi peer driver.
-
Menggunakan versi 3.x
$
npm install @aws-sdk/client-qldb-session --save
$
npm install ion-js --save
$
npm install jsbi --save
-
Menggunakan versi 2.x atau 1.x
$
npm install aws-sdk --save
$
npm install ion-js@4.0.0 --save
$
npm install jsbi@3.1.1 --save
-
Buat file baru bernama app.js
untuk JavaScript, atau app.ts
untuk TypeScript.
Kemudian, secara bertahap tambahkan contoh kode dalam langkah-langkah berikut untuk mencoba beberapa CRUD operasi dasar. Atau, Anda dapat melewati step-by-step tutorial dan menjalankan aplikasi lengkap.
Langkah 2: Inisialisasi driver
Inisialisasi instance driver yang terhubung ke buku besar bernama. quick-start
Tambahkan kode berikut ke app.ts
file app.js
atau Anda.
- 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();
}
-
Dalam contoh kode ini, ganti us-east-1
dengan Wilayah AWS tempat Anda membuat buku besar Anda.
-
Untuk mempermudah, contoh kode yang tersisa dalam panduan ini menggunakan driver dengan pengaturan default, seperti yang ditentukan dalam contoh berikut untuk versi 1.x. Anda juga dapat menggunakan instance driver Anda sendiri dengan kustom sebagai RetryConfig
gantinya.
- 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();
}
-
Dalam contoh kode ini, ganti us-east-1
dengan Wilayah AWS tempat Anda membuat buku besar Anda.
-
Versi 2.x memperkenalkan parameter opsional baru RetryConfig
untuk inisialisasi. QldbDriver
-
Untuk mempermudah, contoh kode yang tersisa dalam panduan ini menggunakan driver dengan pengaturan default, seperti yang ditentukan dalam contoh berikut untuk versi 1.x. Anda juga dapat menggunakan instance driver Anda sendiri dengan kustom sebagai RetryConfig
gantinya.
-
Contoh kode ini menginisialisasi driver yang menggunakan kembali koneksi yang ada dengan menyetel opsi keep-alive. Untuk mempelajari lebih lanjut, lihat Rekomendasi pengaturan 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();
}
Anda dapat mengatur variabel AWS_REGION
lingkungan untuk menentukan Wilayah. Untuk informasi selengkapnya, lihat Menyetel Wilayah AWS di Panduan AWS SDK for JavaScript Pengembang.
Langkah 3: Buat tabel dan indeks
Contoh kode berikut menunjukkan cara menjalankan CREATE TABLE
dan CREATE
INDEX
pernyataan.
-
Tambahkan fungsi berikut yang membuat tabel bernamaPeople
.
- 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");
}
-
Tambahkan fungsi berikut yang membuat indeks untuk firstName
bidang di atas People
meja. Indeks diperlukan untuk mengoptimalkan kinerja kueri dan membantu membatasi pengecualian konflik kontrol konkurensi (OCC) optimis.
- 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)");
}
-
Dalam main
fungsi, Anda pertama kali memanggilcreateTable
, dan kemudian memanggilcreateIndex
.
- 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();
}
-
Jalankan kode untuk membuat tabel dan indeks.
- JavaScript
-
$
node app.js
- TypeScript
-
$
tsc app.ts; node app.js
Langkah 4: Masukkan dokumen
Contoh kode berikut menunjukkan bagaimana menjalankan INSERT
pernyataan. QLDBmendukung bahasa kueri PartiQL SQL (kompatibel) dan format data Amazon Ion (superset dari). JSON
-
Tambahkan fungsi berikut yang menyisipkan dokumen ke dalam People
tabel.
- 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);
}
Contoh ini menggunakan tanda tanya (?
) sebagai placeholder variabel untuk meneruskan informasi dokumen ke pernyataan. execute
Metode ini mendukung nilai di kedua jenis Amazon Ion dan tipe asli Node.js.
Untuk menyisipkan beberapa dokumen dengan menggunakan satu INSERT pernyataan, Anda dapat meneruskan parameter daftar tipe ke pernyataan sebagai berikut.
// people is a list
txn.execute("INSERT INTO People ?", people);
Anda tidak melampirkan variabel placeholder (?
) dalam tanda kurung sudut ganda (<<...>>
) saat melewati daftar. Dalam pernyataan PartiQL manual, tanda kurung sudut ganda menunjukkan koleksi tidak berurutan yang dikenal sebagai tas.
-
Dalam main
fungsi, hapus createTable
dan createIndex
panggilan, dan tambahkan panggilan keinsertDocument
.
- 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();
}
Langkah 5: Kueri dokumen
Contoh kode berikut menunjukkan bagaimana menjalankan SELECT
pernyataan.
-
Tambahkan fungsi berikut yang menanyakan dokumen dari People
tabel.
- 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();
}
-
Dalam main
fungsi, tambahkan panggilan berikut fetchDocuments
setelah panggilan keinsertDocument
.
- 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();
}
Langkah 6: Perbarui dokumen
Contoh kode berikut menunjukkan bagaimana menjalankan UPDATE
pernyataan.
-
Tambahkan fungsi berikut yang memperbarui dokumen dalam People
tabel dengan mengubah lastName
ke"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");
}
-
Dalam main
fungsi, tambahkan panggilan berikut updateDocuments
setelah panggilan kefetchDocuments
. Kemudian, hubungi fetchDocuments
lagi untuk melihat hasil yang diperbarui.
- 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();
}
-
Jalankan kode untuk menyisipkan, menanyakan, dan memperbarui dokumen.
- JavaScript
-
$
node app.js
- TypeScript
-
$
tsc app.ts; node app.js
Menjalankan aplikasi lengkap
Contoh kode berikut adalah versi lengkap dari app.js
danapp.ts
. Alih-alih melakukan langkah-langkah sebelumnya satu per satu, Anda juga dapat menjalankan kode ini dari awal hingga akhir. Aplikasi ini menunjukkan beberapa CRUD operasi dasar pada buku besar bernama. quick-start
Sebelum Anda menjalankan kode ini, pastikan bahwa Anda belum memiliki tabel aktif bernama People
dalam quick-start
buku besar.
- 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();
}
Untuk menjalankan aplikasi lengkap, masukkan perintah berikut.
- JavaScript
-
$
node app.js
- TypeScript
-
$
tsc app.ts; node app.js