Files
sql-server-samples/samples/tutorials/AzureSqlGettingStartedSamples/nodejs/Unix-based/AzureSqlSample/crud_KeyVault.js
T

193 lines
5.0 KiB
JavaScript

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;
var TYPES = require('tedious').TYPES;
var async = require('async');
const KeyVaultSecrets = require("@azure/keyvault-secrets");
const Identity = require("@azure/identity");
var pwd;
var connection;
async function GetSecret(){
console.log("Getting secret...");
// DefaultAzureCredential expects the following three environment variables:
// - AZURE_TENANT_ID: The tenant ID in Azure Active Directory
// - AZURE_CLIENT_ID: The application (client) ID registered in the AAD tenant
// - AZURE_CLIENT_SECRET: The client secret for the registered application
const credential = new Identity.DefaultAzureCredential();
console.log("got default cred");
const vaultName = process.env["KEY_VAULT_NAME"] || "your_keyvault_name";
const url = `https://${vaultName}.vault.azure.net`;
const client = new KeyVaultSecrets.SecretClient(url, credential);
try {
secret = await client.getSecret('AppSecret').then((secret) => {
pwd = secret.value
});
}
catch (error) {
console.log("Error connecting to key vault: " + error);
}
}
async function GetConnection(){
// Create connection to database
var config = {
server: 'your_server.database.windows.net', // update me
authentication: {
type: 'default',
options: {
userName: 'your_user', // update me
password: pwd // fetched from key vault
}
},
options: {
database: 'your_database', // update me
trustServerCertificate: true,
encrypt: true
}
}
connection = new Connection(config);
await connection.connect();
console.log("Connected");
}
function Start(callback) {
console.log('Starting...');
callback(null, 'Jake', 'United States');
}
function Insert(name, location, callback) {
console.log("Inserting '" + name + "' into Table...");
request = new Request(
'INSERT INTO TestSchema.Employees (Name, Location) OUTPUT INSERTED.Id VALUES (@Name, @Location);',
function(err, rowCount, rows) {
if (err) {
callback(err);
} else {
console.log(rowCount + ' row(s) inserted');
callback(null, 'Nikita', 'United States');
}
});
request.addParameter('Name', TYPES.NVarChar, name);
request.addParameter('Location', TYPES.NVarChar, location);
// Execute SQL statement
connection.execSql(request);
}
function Update(name, location, callback) {
console.log("Updating Location to '" + location + "' for '" + name + "'...");
// Update the employee record requested
request = new Request(
'UPDATE TestSchema.Employees SET Location=@Location WHERE Name = @Name;',
function(err, rowCount, rows) {
if (err) {
callback(err);
} else {
console.log(rowCount + ' row(s) updated');
callback(null, 'Jared');
}
});
request.addParameter('Name', TYPES.NVarChar, name);
request.addParameter('Location', TYPES.NVarChar, location);
// Execute SQL statement
connection.execSql(request);
}
function Delete(name, callback) {
console.log("Deleting '" + name + "' from Table...");
// Delete the employee record requested
request = new Request(
'DELETE FROM TestSchema.Employees WHERE Name = @Name;',
function(err, rowCount, rows) {
if (err) {
callback(err);
} else {
console.log(rowCount + ' row(s) deleted');
callback(null);
}
});
request.addParameter('Name', TYPES.NVarChar, name);
// Execute SQL statement
connection.execSql(request);
}
function Read(callback) {
console.log('Reading rows from the Table...');
// Read all rows from table
request = new Request(
'SELECT Id, Name, Location FROM TestSchema.Employees;',
function(err, rowCount, rows) {
if (err) {
callback(err);
} else {
console.log(rowCount + ' row(s) returned');
callback(null);
}
});
// Print the rows read
var result = "";
request.on('row', function(columns) {
columns.forEach(function(column) {
if (column.value === null) {
console.log('NULL');
} else {
result += column.value + " ";
}
});
console.log(result);
result = "";
});
// Execute SQL statement
connection.execSql(request);
}
function Complete(err, result) {
if (err) {
throw err;
} else {
console.log("Done!");
}
}
async function Main() {
// Attempt to connect and execute queries if connection goes through
console.log('Starting');
await GetSecret();
await GetConnection();
connection.on('connect', function(err) {
if (err) {
console.log(err);
} else {
console.log('Connected');
// Execute all functions in the array serially
async.waterfall([
Start,
Insert,
Update,
Delete,
Read
], Complete);
}});
}
Main();