NodeJs之服務搭建與數據庫鏈接

NodeJs之服務搭建與數據庫鏈接

一,介紹與需求分析

 1.1,介紹

Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境。 Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。Node.js 的包管理器 npm,是全球最大的開源庫生態系統。html

二,node服務搭建

2.1,安裝建立項目服務

第一步:安裝NODEnode

第二步:安裝express,使用熟悉的命令安裝,mysql

1 npm install -g express

第三步:最新express版本中將命令工具分家出來了(項目地址:https://github.com/expressjs/generator),因此咱們還須要安裝一個命令工具,命令以下:git

1 npm install -g express-generator

第四步:使用express建立一個工程:github

1 express myervice

第五步:安裝包並啓動sql

1 cd myervice 2 npm install //安裝包
3 npm start //啓動服務

 第六步:訪問http://localhost:3000/就看到熟悉的頁面了數據庫

2.2,配置node服務器

具體的代碼以下:express

 1 var express = require('express');//引入express模塊 5 
 6 var app = express();//初始化化
 7 var settingConfig = require('./config/settingConfig.js');//引入配置文件
 8 var allow_Orgin = settingConfig.getValueByKey("Access_Control_Allow_Origin");//解析
 9 // Access Control Allow
10 var cors = require('cors');//引入跨域資源共享
11 var whitelist = allow_Orgin.split(';'); 12 
13 var hostName = '127.0.0.1';//設置主機名
14 var port = 8080;//設置端口
15 
16 var corsOptions = {//配置
17     credentials: true, 18     origin: function (origin, callback) { 19         if (origin==undefined || whitelist.indexOf(origin) !== -1) { 20             callback(null, true) 21         } else { 22  console.log(origin); 23             callback(new Error('Not allowed by CORS')) 24  } 25  } 26 } 27 app.use(cors(corsOptions)); 28 35 app.use('/api', require('./routes/dbWebApi.js')); 36 
37 // catch 404 and forward to error handler
38 app.use(function(req, res, next) { 39   var err = new Error('Not Found'); 40   err.status = 404; 41   var result = { 42       httpCode: 404, 43  message: err.message,
47  } 48   res.status(404).json(result); 49  next(); 50 }); 51 
52 // error handler
53 app.use(function(err, req, res, next) { 54   // set locals, only providing error in development
55   res.locals.message = err.message; 56   res.locals.error = req.app.get('env') === 'development' ? err : {};
58   // render the error page
59   res.status(err.status || 500).json({ 60       httpCode: err.status || 500, 61  message: err.message,
65  }); 66 }); 67 
68 app.listen(port,hostName,function(){//監聽
69     console.log(`服務器運行在http://${hostName}:${port}`);
70  });

解析配置文件的代碼settingConfig.js以下:npm

 1 var xml2js = require('xml2js');//xml解析
 2 var fs = require('fs');//文件處理系統
 3 
 4 function getValueByKey(key) {  5     var path = './config/settingConfig.xml';//xml配置文件
 6     var result = '';  7     var data;  8     try {  9         data = fs.readFileSync(path, 'utf8'); 10  } 11     catch (err) { 12         throw err; 13  } 14     var xmlDoc = xml2js.parseString(data, { explicitArray: true }, function (err, json) { 15      
16  }; 17  }); 18     return result; 19 }

配置文件settingConfig.xml以下:json

1 <?xml version="1.0" encoding="utf-8" ?>
2 <appSettings>
3   <add key="Access_Control_Allow_Origin" value="http://localhost:8080;http://localhost:3000"/>
4   <add key="dbName" value="test"/>
5   <add key="WhetherNeedAuth" value="true"/>
6 </appSettings>

如需完整代碼,請先留言評論加關注

三,node鏈接數據庫

3.1,鏈接數據庫的配置與解析

目前只支持兩種類型的數據庫:MySQL sql server

解析配置文件:operateXML.js:

 1 function params(){//簡單配置  2  this.server="";  3  this.database="";  4  this.user="";  5  this.password="";  6  this.sp_name = "";  7  this.sp_output = "";  8 }  9 function mysqlparams(){ 10  this.host=""; 11  this.port=""; 12  this.database=""; 13  this.user=""; 14  this.password=""; 15  this.sp_name=""; 16  this.sp_output = ""; 17 } 18 function getMsSQLParamObj(appName,spName){ //sql server 19  var xml2js = require('xml2js'); 20  var fs=require('fs'); 21  var path='./config/databaseConfig.xml'; 22  var param=new params(); 23  var data; 24  try{ 25  data= fs.readFileSync(path, 'utf8'); 26  } 27  catch(err){ 28  throw err; 29  } 30  var xmlDoc = xml2js.parseString(data, { explicitArray: true }, function (err, json) { 31          
32  }); 33  return param; 34 } 35 
36 function getMySQLParamObj(appName,spName){ //mysql 37  var xml2js = require('xml2js'); 38  var fs=require('fs'); 39  var path='./config/databaseConfig.xml'; 40  var param=new mysqlparams(); 41  var data; 42  try{ 43  data= fs.readFileSync(path, 'utf8'); 44  } 45  catch(err){ 46  throw err; 47  } 48  var xmlDoc = xml2js.parseString(data, { explicitArray : true },function(err, json) { //解析 49          
50  }); 51  return param; 52 } 53

XML配置文件:databaseConfig:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <root>
 3   <sqlserver>
 4     <database name="TEST" server="localhost\MSSQL" database="test" user="sa" pwd="908">
 5       <!--登陸註冊-->
 6       <storedProcedure name="RegisterToUser" value="[Auth].[usp_RegisterToUser]" description="註冊"/>
 7     </database>
 8   </sqlserver>
 9   <mysql>
10     <database name="test" host="localhost" port="3306" database="test" user="root" pwd="root">
11       <storedProcedure name="getUserPages" value="sp_getUserPages" output="total"/>
12       <storedProcedure name="getUserCount" value="sp_getUserCount"/>
13     </database>
14   </mysql>
15 </root>

3.2,鏈接數據庫

鏈接數據庫:db_mssql.JS

 1 var sql = require("mssql");  2 var xml = require('../config/operateXML.js');//加載解析配置文件
 3 
 4 function operateDatabase(appName, spName, json, callback) {  5     var paraarr = {}  6     if ((typeof json) == "string")  7         parr = JSON.parse(json);  8     else
 9         parr = json; 10     var config = xml.getMsSQLParamObj(appName, spName); 11     try {//鏈接數據庫
12         new sql.ConnectionPool(config).connect().then(function (pool) { 13            
14     } catch (err) { 15        
16  } 17 }

3.2,get與post請求

定義請求方式:dbWebApi.js

 1 var express = require('express');  2 var router = express.Router();  3 var dbservice = require('../services/db_mssql.js');  4 
 5 router.get('/readData/:appName/:spName/:json', function (req, res) {  6     dbservice.operateDatabase(appName, spName, json, function (data) { 8  });  9 }); 10 
11 router.post('/postData', function (req, res) { 12     dbservice.operateDatabase(appName, spName, json, function (data) { 13       
14  }); 15 });

下一章:NodeJs鏈接操做MongoDB數據庫

相關文章
相關標籤/搜索