在Node.Js存取SQL Server資料庫

by vivid 27. 六月 2018 10:53

.NET Magazine國際中文電子雜誌
作 者:許薰尹
審 稿:張智凱
文章編號:N180619602
出刊日期: 2018/6/27

這篇文章主要介紹如何在Node.js中撰寫程式碼,連結到微軟SQL Server / SQL Server Express資料庫,並執行資料查詢的作業。本篇文章將從建立Node.js專案開始,並利用Visual Studio Code進行開發。

要進行程式設計之前,你要先確保開發環境正確安裝了以下軟體:

· Node.js:下載網址為:「https://nodejs.org/en/」。

· Visual Studio Code開發工具:為免費開發工具,下載網址為:「https://code.visualstudio.com/download

· SQL Server或SQL Server Express。本文使用免費的SQL Server 2017 Express版本做範例,下載網址為:「https://www.microsoft.com/en-us/sql-server/sql-server-editions-express

· SQL Server Management Studio (SSMS):下載網址為:「https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017

 

建立測試資料庫

先執行安裝好的「SQL Server Management Studio」工具,登入Sql Server Express資料庫伺服器,以便建立測試資料庫,請參考下圖所示:

clip_image002

圖 1:登入Sql Server Express資料庫伺服器。

在「SQL Server Management Studio」工具「Object Explorer」視窗 - 「Databases」項目上,按滑鼠右鍵,從快捷選單選擇「New Database」項目,請參考下圖所示:

clip_image004

圖 2:建立新資料庫。

在「SQL Server Management Studio」工具「New Database」視窗 -「Database name」項目設定資料庫名稱為「MyDB」,最後按下「OK」按鈕,請參考下圖所示:

clip_image006

圖 3:設定資料庫名稱為「MyDB」。

選取「SQL Server Management Studio」工具「Object Explorer」視窗,「Databases」-「MyDB」- 分類下的「Tables」項目,按滑鼠右鍵,從快捷選單選擇「Table」項目,請參考下圖所示:

clip_image008

圖 4:新增資料表。

新增資料表欄位,請參考下圖所示,新增「Id」、「Name」、「Age」欄位,並在「Id」欄位上方,按滑鼠右鍵,從快捷選單選擇「Set Primary Key」項目,將其設定為主鍵:

clip_image010

圖 5:新增「Id」、「Name」、「Age」欄位。

按下「SQL Server Management Studio」工具列上的「Save」按鈕,此時會出現一個「Choose Name」對話盒,在對話盒中輸入資料表名稱,如「Employees」,然後按下「OK」按鈕,請參考下圖所示:

clip_image012

圖 6:設定資料表名稱。

接著先手動輸入幾筆資料到「Employees」資料表,選取「SQL Server Management Studio」工具「Object Explorer」視窗,「Databases」-「MyDB」- 「Tables」分類下的「dbo.Employees」項目,按滑鼠右鍵,從快捷選單選擇「Edit Top 200 Rows」項目,請參考下圖所示:

clip_image014

圖 7:編輯資料。

接著輸入幾筆測試資料,請參考下圖所示:

clip_image016

圖 8:輸入測試資料。

建立Node.js應用程式

接下來我們要建立Node.js應用程式。先執行作業系統命令提示字元「cmd.exe」,輸入以下指令,切換工作資料夾到要存放Node.js應用程式所在的路徑:

Cd C:\temp\NodeJS

在命令提示字元輸入以下指令,建立一個名為「SqlDemo」的資料夾:

mkdir SqlDemo

命令提示字元輸入以下指令,切換工作資料夾到「SqlDemo」:

cd SqlDemo

命令提示字元輸入以下指令,以建立「package.json」檔案:

npm init

上述指令的執行結果,請參考下圖所示:

clip_image018

圖 9:建立Node.js應用程式。

接下來會詢問你建立「package.json」檔案所需的資訊,如果按下「Enter」鍵,便會填入預設值,參考以下的設定:

package name : (sqldemo)sqldemo

version : (1.0.0)

description : access sql server express

entry point : (index.js) index.js

test command :

git repository :

keywords :

author :

license : (ISC)

About to write to C:\temp\NodeJS\package.json :

{

"name" : "sqldemo",

"version" : "1.0.0",

"description" : "access sql server express",

"main" : "index.js",

"scripts" : {

"test" : "echo \"Error: no test specified\" && exit 1"

},

"author" : "",

"license" : "ISC"

}

Is this ok? (yes) y

其中「package name」用來指定Node.js應用程式的名稱;「Version」為應用程式的版本;「description」用來輸入簡短的文字描述應用程式的用途。「main」設定應用程式的進入點。其餘項目暫時用不到,先按下「Enter」鍵接受預設值即可,最後要輸入「yes」確認,請參考下圖所示:

clip_image020

圖 10:建立「package.json」檔案。

接著在「sqldemo」資料夾下方便會產生一個「package.json」檔案,檔案內容請參考以下所示:

{

"name" : "sqldemo",

"version" : "1.0.0",

"description" : "access sql server express",

"main" : "index.js",

"scripts" : {

"test" : "echo \"Error: no test specified\" && exit 1"

},

"author" : "",

"license" : "ISC"

}

 

使用Visual Studio Code開發

現在讓我們切換到「Visual Studio Code」工具來開發程式,啟用「Visual Studio Code」,選取「File」-「Open Folder」項目,從對話盒中選取「SqlDemo」資料夾,請參考下圖所示:

clip_image022

圖 11:使用「Visual Studio Code」開發。

在「Visual Studio Code」工具進行開發之前,我們需要先安裝撰寫程式所需要的套件(Packages),我們可以使用「npm (Node Package Manager)」程式來進行安裝,這個範例將需要安裝以下模組:

· Express:Express是一個廣為流行的簡易型網站開發架構,可以搭配Node.js來開發網站程式。

· Mssql:適用於Node.js的Microsoft SQL Server 用戶端套件。

若要在「Visual Studio Code」工具進行安裝,可以按下「CTRL + `」組合鍵,開啟「Integrated Terminal」視窗,接著在「Integrated Terminal」視窗中輸入以下指令,安裝「express」與「mssql」:

npm install express mssql

這個指令的執行結果請參考下圖所示:

clip_image024

圖 12:安裝「express」與「mssql」套件。

完成後會在根目錄下產生一個「node_modules」子資料夾,並自動更新「package.json」檔案中「dependencies」項目,目前「package.json」檔案內容看起來如下:

{

"name" : "sqldemo",

"version" : "1.0.0",

"description" : "access sql server express",

"main" : "index.js",

"scripts" : {

"test": "echo \"Error: no test specified\" && exit 1"

},

"author" : "",

"license" : "ISC",

"dependencies" : {

"express" : "^4.16.3",

"mssql" : "^4.1.0"

}

}

加入Index.js檔案

再來我們將要在主程式「Index.js」檔案中使用「express」框架建立一個簡單的網站伺服器,可以接收HTTP請求,並送出回應。點選Visual Studio Code開發工具「New File」按鈕,在「SQLDEMO」資料夾下建立一個JavaScript檔案,請參考下圖所示:

clip_image026

圖 13:建立一個JavaScript檔案。

將檔案名稱命為「Index.js」檔案,請參考下圖所示:

clip_image028

圖 14:設定檔案名稱。

在「Index.js」檔案中加入以下程式碼:

var express = require('express');
var app = express();
var port = process.env.port || 8080;

app.listen(port, function(){
    var msg = "Server is running on port : " + port;
    console.log(msg);
});

 

第一行程式使用「require」方法,傳入「express」字串,以載入express框架。

第二行程式叫用「express」方法建立express實體。

第三行程式設定埠號,預設設定埠碼為「8080」。

第四行程式叫用「listen」方法,讓Http Server聽在「8080」埠,在伺服器啟動時,印出提示訊息。

接下來我們便可以在Visual Studio Code開發工具「Integrated Terminal」視窗輸入以下指令執行程式:

node index.js

這個指令的執行結果請參考下圖所示:

clip_image030

圖 15:執行程式

提示:在Visual Studio Code開發工具「Integrated Terminal」視窗按「CTRL + C」可以結束此程式的執行。

處理HTTP Get請求

接下來我們要修改程式碼,以處理HTTP Get請求。修改「Index.js」檔案,加入以下程式碼,只要收到路徑為「/employees」的HTTP Get請求,就送出一個JSON物件,其中包含歡迎的訊息:

var express = require('express');
var app = express();
var port = process.env.port || 8080;

app.get( "/employees",function ( request,response ){
    response.json( {"msg" : "hello from nodejs"} );
});

app.listen( port, function(){
    var msg = "Server is running on port : " + port;
    console.log( msg );
});


 

在Visual Studio Code開發工具「Integrated Terminal」視窗輸入以下指令執行程式:

node index.js

這個指令的執行結果請參考下圖所示:

clip_image032

圖 16:測試HTTP請求。

接著開啟任意瀏覽器,輸入以下URL:

http://localhost:8080/employees

當你送出Http請求,瀏覽器應該會收到以下畫面:

clip_image034

圖 17:接收伺服端回傳的訊息。

SQL Server Express資料庫設定

為了要能正確連接到SQL Server/SQL Server Express資料庫伺服器,資料庫需要進行以下設定,首先開啟作業系統「Computer Management」管理工具 - 「Services and Applications」 - 「SQL Server Configuration Manager」-「Protocols for SQLEXPRESS」,點選右方視窗中「TCP/IP」項目,按滑鼠右鍵,從快捷選單選擇「Enable」啟用之,請參考下圖所示:

clip_image036

圖 18:啟用「TCP/IP」。

點選「Computer Management」管理工具右方視窗中「TCP/IP」項目,按滑鼠右鍵,從快捷選單選擇「Properties」,在「IP Addresses」分頁設定「TCP Port」為「1433」,請參考下圖所示:

clip_image038

圖 19:設定「TCP Port」屬性。

在作業系統「Computer Management」管理工具 - 「Services and Applications」 - 「Services」,點選右方視窗中「SQL Server Brower」項目,按滑鼠右鍵,從快捷選單選擇「Start」啟動之,請參考下圖所示:

clip_image040

圖 20:啟動「SQL Server Brower」服務。

連結到SQL Server Express資料庫

接下來修改「Index.js」檔案,加入連結到SQL Server Express資料庫,以及查詢資料的程式碼如下:

 

var express = require('express');
var app = express();
var port = process.env.port || 8080;

var sql = require("mssql");

var conn = new sql.ConnectionPool({
    user :'你的帳號',
    password :'你的密碼',
    server :'localhost\\SQLEXPRESS',
    database :'MyDB',
    port : 1433
});

app.get( "/employees",function ( request,response ){
    //response.json({"Message":"Welcome to Node js"});
    conn.connect().then(function ()
    {
        var sqlQuery = "SELECT * FROM Employees";
        var req = new sql.Request( conn );
        req.query( sqlQuery ).then(function ( recordset )
        {
            response.json( recordset.recordset );
            conn.close();
        }).catch( function ( err ) {
            conn.close();
            response.status( 400 ).send( err );
        });
    }).catch(function ( err ) {
        conn.close();
        response.status( 400 ).send( err );
    });
});

app.listen( port, function(){
    var msg = "Server is running on port : " + port;
    console.log( msg );
});

以下分解程式碼說明如下,首先叫用「app.get」方法接收HTTP GET請求。

 

app.get( "/employees",function ( request, response ){

收到請求後,接著叫用「connect()」方法,透過「ConnectionPool」物件連接到資料庫:

conn.connect().then( function ()

{

建立SQL查詢,回傳「Employees」資料表中所有的資料:

var sqlQuery = "SELECT * FROM Employees";

利用「Request」的「query」方法送出SQL查詢:

var req = new sql.Request( conn );

req.query( sqlQuery ).then( function ( recordset )

{

將接收到的查詢結果透過「response」的「json」方法送到呼叫端程式,然後關閉資料庫連線:

           response.json( recordset.recordset );
            conn.close();


叫用「catch」方法攔截可能的例外錯誤,並在例外錯誤發生時送出錯誤訊息:


        }).catch(function ( err ) {
            conn.close();
            response.status( 400 ).send( err );
        });
    }).catch(function ( err ) {
        conn.close();
        response.status( 400 ).send( err );
    });
});

 

在Visual Studio Code開發工具「Integrated Terminal」視窗輸入以下指令執行程式:

node index.js

開啟任意瀏覽器,輸入以下URL:

http://localhost:8080/employees

伺服端將會回傳以下JSON格式的資料:

[

{ "Id" : 1 , "Name" : "Mary" , "Age" : 25 },

{ "Id" : 2 , "Name" : "Candy" , "Age" : 43 },

{ "Id" : 3 , "Name" : "Lili" , "Age" : 52 },

{ "Id" : 4 , "Name" : "Betty" , "Age" : 52 },

{ "Id" : 5 , "Name" : "LuLu" , "Age" : 31 },

{ "Id" : 6 , "Name" : "Cindy" , "Age" : 35 },

{ "Id" : 7 , "Name" : "Louies" , "Age" : 35 },

{ "Id" : 8 , "Name" : "Jack" , "Age" : 35 },

{ "Id" : 9 , "Name" : "Mike" , "Age" : 65 },

{ "Id" : 10 , "Name" : "Chris" , "Age" : 24 }

]

此範例執行結果請參考下圖所示:

clip_image042

圖 21:接收伺服端回傳的JSON資料。

Tags:

.NET Magazine國際中文電子雜誌 | JavaScript | 許薰尹Vivid Hsu

新增評論




  Country flag
biuquote
  • 評論
  • 線上預覽
Loading






NET Magazine國際中文電子雜誌

NET Magazine國際中文電子版雜誌,由恆逸資訊創立於2000,自發刊日起迄今已發行超過500篇.NET相關技術文章,擁有超過40000名註冊讀者群。NET Magazine國際中文電子版雜誌希望藉於電子雜誌與NET Developer達到共同學習與技術新知分享,歡迎每一位對.NET 技術有興趣的朋友們多多支持本雜誌,讓作者群們可以有持續性的動力繼續爬文。<請加入免費訂閱>

月分類Month List