• NodeJs之服务搭建与数据库连接


    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 });

    下一章:NodeJs连接操作MongoDB数据库

  • 相关阅读:
    centos crash debug
    go get Unknown SSL protocol error in connection to gopkg.in
    Tensorflow serving with Kubernetes
    Spring 集成 Swagger UI
    Docker Registry V2 Garbage Collection
    Docker Registry V2 with Nginx
    Zabbix磁盘性能监控
    Zabbix CPU utilization监控参数
    Windows挂载Gluster复制卷
    Redis持久化存储(三)
  • 原文地址:https://www.cnblogs.com/jackson-yqj/p/10123603.html
Copyright © 2020-2023  润新知