NodeJs之服务搭建与数据库连接
一,介绍与需求分析
1.1,介绍
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。
二,node服务搭建
2.1,安装创建项目服务
第一步:安装NODE
第二步:安装express,使用熟悉的命令安装,
1 npm install -g express
第三步:最新express版本中将命令工具分家出来了(项目地址:https://github.com/expressjs/generator),所以我们还需要安装一个命令工具,命令如下:
1 npm install -g express-generator
第四步:使用express创建一个工程:
1 express myervice
第五步:安装包并启动
1 cd myervice 2 npm install //安装包 3 npm start //启动服务
第六步:访问http://localhost:3000/就看到熟悉的页面了
2.2,配置node服务器
具体的代码如下:
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如下:
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如下:
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="localhostMSSQL" 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 });