zoukankan      html  css  js  c++  java
  • 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数据库

  • 相关阅读:
    AjaxMethod js调用后台方法
    鼠标点击清空文本框 失去焦点显示提示信息
    js屏蔽BackSpace 返回上一页
    IE8标准模式打开网页
    Windows无法启动SQL server 代理服务(位于本地计算机上)错误1067:进程意外终止
    遍历枚举,添加进DropDownist
    文本框只能输入数字
    个人开发框架总结(五)
    从Power Design设计文档中提取Model
    FaibClass.WebControls控件详解(一)
  • 原文地址:https://www.cnblogs.com/jackson-yqj/p/10123603.html
Copyright © 2011-2022 走看看