Quantcast
Viewing all articles
Browse latest Browse all 8691

Azure FunctionsのNodeでSQL Serverから値を取得したメモ

概要

AzureのFunctionsでNodeを利用したSQL Serverへの接続をしたメモ。
async awaitを使ってConnectionをとれるようにした。
ORMapperを自前で作ってみた。
自動でやってくれるライブラリも探せばありそうだなー。

この時点のソース

ソース

models/db.ts
import{Connection,Request,TYPES}from'tedious'letconnectionInstance=null;exportconstgetConnection=()=>newPromise<Connection>(async(resolve,reject)=>{if(connectionInstance){resolve(connectionInstance)}try{connectionInstance=awaitcreateConnection()resolve(connectionInstance)}catch(err){reject(err)}})constcreateConnection=()=>newPromise<Connection>((resolve,reject)=>{constconfig={server:process.env["SQLConnectionServer"],authentication:{type:'default',options:{userName:process.env["SQLConnectionUserName"],password:process.env["SQLConnectionUserPassword"],}},options:{database:process.env["SQLConnectionDatabase"],rowCollectionOnDone:true,// Requestの第二引数のrowsに値を入れるために必要rowCollectionOnRequestCompletion:true,// Requestの第二引数のrowsに値を入れるために必要}}constconnection=newConnection(config);connection.on('connect',function(err){if(err){reject(err)return}resolve(connection)});})/**
 * レコードをオブジェクトにして返す
 * @param columns レコード1行
 */constformatORMapping=<T>(columns:any[])=>{constret={}asTcolumns.forEach(col=>{console.log(col)ret[col.metadata.colName]=col.value})returnret}exportconstread=<T>(connection:Connection,query:string)=>newPromise<T[]>((resolve,reject)=>{constrequest=newRequest(query,(err,rowCount,rows)=>{if(err){reject(err);return;}console.log(rowCount+' row(s) returned');resolve(rows.map<T>(formatORMapping))});connection.execSql(request);})
models/users.ts
import*asdbfrom'./db';interfaceUser{UserID:numberName:string}exportconstselect=async()=>{constconnection=awaitdb.getConnection();constquery="select * from Users";returnawaitdb.read<User[]>(connection,query)}
index.ts
import{AzureFunction,Context,HttpRequest}from"@azure/functions"import*asusersfrom'./models/users';consthttpTrigger:AzureFunction=asyncfunction(context:Context,req:HttpRequest):Promise<void>{constresponseMessage=awaitusers.select();context.res={body:responseMessage};};exportdefaulthttpTrigger;

参考

Azure Functions から SQLServerに接続する(node.js編)
クイック スタート:Node.js を使用して Azure SQL Database または Azure SQL Managed Instance 内のデータベースに対してクエリを実行する
Get started with SQL Server
Tedious API
Win10 + node.js から SQL Server 2019 Express に CSVファイルを書き込んでみる 修正版(tedious-connection-pool)


Viewing all articles
Browse latest Browse all 8691

Trending Articles