Я использую модуль ms sql npm (с драйвером Tedious) для чтения / записи в базу данных Azure Sql с моего узла Server. https://www.npmjs.com/package/mssql
Все примеры, которые я нашел, представляют собой жестко закодированный пример запроса о том, читать или писать записи, например:
var insertRecordIntoTable = function (callback) {
sql.connect(dbConfig).then(pool => {
return pool.request()
.input('ID', sql.Int, 210)
.input('Name', sql.NVarChar, "John Doe")
.input('EmailAddress', sql.NVarChar, "test@test.com")
.query("INSERT INTO Accounts (ID, Name, EmailAddress) VALUES (@ID, @Name, @EmailAddress)")
}).then(result => {
console.dir(result)
callback(result);
}).catch(err => {
// ... error checks
console.log("Error occured: " + err);
callback(err);
});
}
Очевидно, Я хотел бы написать один стандартный метод для записи записей в любую таблицу в базе данных.
Теперь я могу получить структуру каждой таблицы и использовать ее, чтобы узнать, какой тип данных должен содержать каждое поле. быть от ключа в jsonRecord и написать что-то вроде этого:
var insertRecordIntoTable = function (jsonRecord, tableName, callback) {
let arrKeys = jsonRecord.allKeys();
let columnNames = getCommaSeparatedColumnNames(arrKeys);
let valuePlaceholders = getValuePlaceholdersForSql(arrKeys);
sql.connect(dbConfig).then(pool => {
return pool.request()
// how do I write something like this so that dynamic number of fields and values get populated in the query inside this promise.
// I'm open to methods without promise as well.
for(let x=0; x < arrKeys.length; x++){
let key = arrKeys[x];
// .input('ID', sql.Int, 210)
.input(key, getTypeForKey(key, tableName), jsonRecord[ key ] )
}
.query("INSERT INTO " + tableName + " (" + columnNames + ") VALUES (" + valuePlaceholders + ")")
}).then(result => {
console.dir(result)
callback(result);
}).catch(err => {
// ... error checks
console.log("Error occured: " + err);
callback(err);
});
}
function getTypeForKey(key){. // looks up table schema and returns keyType }
function getCommaSeparatedColumnNames(arrKeys){ return arrKeys.join(", "); }
function getValuePlaceholdersForSql(arrKeys){ // write code to append '@' before every key and then join using comma's and return that string }
Я уверен, что node.js запись в SQL - довольно распространенная функциональность, и могут быть более эффективные способы достижения того, что я пытаюсь сделать здесь. Пожалуйста, не стесняйтесь go другой маршрут.
PS - хотя я должен сказать, что я предпочитаю мс sql над утомительным пакетом. Похоже, функциональность кажется лучше после просмотра документации за последние несколько часов.