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

一,介绍与需求分析

1.1,介绍

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。

二,node服务搭建

2.1,安装创建项目服务

第一步:安装NODE

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

 npm install -g express

第三步:最新express版本中将命令工具分家出来了(项目地址:https://github.com/expressjs/generator),所以我们还需要安装一个命令工具,命令如下:

 npm install -g express-generator

第四步:使用express创建一个工程:

 express myervice

第五步:安装包并启动

 cd myervice
npm install //安装包
npm start //启动服务

第六步:访问http://localhost:3000/就看到熟悉的页面了

2.2,配置node服务器

具体的代码如下:

 var express = require('express');//引入express模块
var app = express();//初始化化
var settingConfig = require('./config/settingConfig.js');//引入配置文件
var allow_Orgin = settingConfig.getValueByKey("Access_Control_Allow_Origin");//解析
// Access Control Allow
var cors = require('cors');//引入跨域资源共享
var whitelist = allow_Orgin.split(';'); var hostName = '127.0.0.1';//设置主机名
var port = 8080;//设置端口 var corsOptions = {//配置
credentials: true,
origin: function (origin, callback) {
if (origin==undefined || whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
console.log(origin);
callback(new Error('Not allowed by CORS'))
}
}
}
app.use(cors(corsOptions));
app.use('/api', require('./routes/dbWebApi.js')); // catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
var result = {
httpCode: 404,
message: err.message,
}
res.status(404).json(result);
next();
}); // error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500).json({
httpCode: err.status || 500,
message: err.message,
});
}); app.listen(port,hostName,function(){//监听
console.log(`服务器运行在http://${hostName}:${port}`);
});

解析配置文件的代码settingConfig.js如下:

 var xml2js = require('xml2js');//xml解析
var fs = require('fs');//文件处理系统 function getValueByKey(key) {
var path = './config/settingConfig.xml';//xml配置文件
var result = '';
var data;
try {
data = fs.readFileSync(path, 'utf8');
}
catch (err) {
throw err;
}
var xmlDoc = xml2js.parseString(data, { explicitArray: true }, function (err, json) { };
});
return result;
}

配置文件settingConfig.xml如下:

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

如需完整代码,请先留言评论加关注

三,node连接数据库

3.1,连接数据库的配置与解析

目前只支持两种类型的数据库:MySQL sql server

解析配置文件:operateXML.js:

 function params(){//简单配置
this.server="";
this.database="";
this.user="";
this.password="";
this.sp_name = "";
this.sp_output = "";
}
function mysqlparams(){
this.host="";
this.port="";
this.database="";
this.user="";
this.password="";
this.sp_name="";
this.sp_output = "";
}
function getMsSQLParamObj(appName,spName){ //sql server
var xml2js = require('xml2js');
var fs=require('fs');
var path='./config/databaseConfig.xml';
var param=new params();
var data;
try{
data= fs.readFileSync(path, 'utf8');
}
catch(err){
throw err;
}
var xmlDoc = xml2js.parseString(data, { explicitArray: true }, function (err, json) { });
return param;
} function getMySQLParamObj(appName,spName){ //mysql
var xml2js = require('xml2js');
var fs=require('fs');
var path='./config/databaseConfig.xml';
var param=new mysqlparams();
var data;
try{
data= fs.readFileSync(path, 'utf8');
}
catch(err){
throw err;
}
var xmlDoc = xml2js.parseString(data, { explicitArray : true },function(err, json) { //解析 });
return param;
}

XML配置文件:databaseConfig:

 <?xml version="1.0" encoding="UTF-8"?>
<root>
<sqlserver>
<database name="TEST" server="localhost\MSSQL" database="test" user="sa" pwd="908">
<!--登录注册-->
<storedProcedure name="RegisterToUser" value="[Auth].[usp_RegisterToUser]" description="注册"/>
</database>
</sqlserver>
<mysql>
<database name="test" host="localhost" port="3306" database="test" user="root" pwd="root">
<storedProcedure name="getUserPages" value="sp_getUserPages" output="total"/>
<storedProcedure name="getUserCount" value="sp_getUserCount"/>
</database>
</mysql>
</root>

3.2,连接数据库

连接数据库:db_mssql.JS

 var sql = require("mssql");
var xml = require('../config/operateXML.js');//加载解析配置文件 function operateDatabase(appName, spName, json, callback) {
var paraarr = {}
if ((typeof json) == "string")
parr = JSON.parse(json);
else
parr = json;
var config = xml.getMsSQLParamObj(appName, spName);
try {//连接数据库
new sql.ConnectionPool(config).connect().then(function (pool) { } catch (err) { }
}

3.2,get与post请求

定义请求方式:dbWebApi.js

 var express = require('express');
var router = express.Router();
var dbservice = require('../services/db_mssql.js'); router.get('/readData/:appName/:spName/:json', function (req, res) {
dbservice.operateDatabase(appName, spName, json, function (data) { });
}); router.post('/postData', function (req, res) {
dbservice.operateDatabase(appName, spName, json, function (data) { });
});

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

NodeJs之服务搭建与数据库连接的更多相关文章

  1. 使用nodejs和express搭建http web服务

    目录 简介 使用nodejs搭建HTTP web服务 请求nodejs服务 第三方lib请求post 获取http请求的正文 Express和使用express搭建http web服务 express ...

  2. 57.NodeJS入门--环境搭建 IntelliJ IDEA

    转自:https://blog.csdn.net/wang19891106/article/details/51127133 NodeJS入门–环境搭建 IntelliJ IDEA 本人也刚开始学习N ...

  3. NodeJS入门--环境搭建 IntelliJ IDEA

    NodeJS入门–环境搭建 IntelliJ IDEA 本人也刚开始学习NodeJS,所以以此做个笔记,欢迎大家提出意见. 1.首先 下载安装NodeJS,下载安装IntelliJ IDEA 2.接下 ...

  4. 借助Nodejs在服务端使用jQuery采集17173游戏排行信息

    Nodejs相关依赖模块介绍 Nodejs的优势这里就不做介绍啦,这年头相信大家对它也不陌生了.这里主要介绍一下用到的第三方模块. async:js代码中到处都是异步回调,很多时候我们需要做同步处理, ...

  5. ServiceStack.Hello——跨平台.net REST api服务搭建

    ServiceStack.Hello--跨平台.net REST api服务搭建 自己创建: https://github.com/ServiceStack/ServiceStack/wiki/Cre ...

  6. WCFRESTFul服务搭建及实现增删改查

    WCFRESTFul服务搭建及实现增删改查 RESTful Wcf是一种基于Http协议的服务架构风格,  RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力 ...

  7. 微信小程序语音识别服务搭建全过程解析(项目开源在github)

    silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...

  8. 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)

    silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...

  9. Git服务搭建及github使用教程

    .pos { position: fixed; top: 35%; left: 90% } .pos a { border: 2px solid white; background: #99CCFF; ...

随机推荐

  1. mysql的学习笔记(六)

    1.字符函数 (1).CONCAT(str1,str2,...)函数,将多列信息合并输出. SELECT CATCAT('hello','mysql') as test (2).CONCAT_WS(' ...

  2. Linux配置成网关

    之前按照诸葛建伟的metasploit魔鬼训练营搭了个简单的内网环境,其中就是一台linux作为内网网关.但是虚拟机开启的时候经常出现包不能转发的情况,也就是网关没有配置好. 在网上找了好几个才找到适 ...

  3. 【工利其器】必会工具之(三)systrace篇(1)官网翻译

    前言 Android 开发者官网中对systrace(Android System Trace)有专门的介绍,本篇文章作为systrace系列的开头,笔者先不做任何介绍,仅仅翻译一下官网的介绍.在后续 ...

  4. springboot~application.properties和application.yml的使用

    在springboot框架里进行项目开始时,我们在resource文件夹里可以存放配置文件,而格式可以有两种,properties和yml,前者是扁平的k/v格式,而后者是yml的树型结构,我们建议使 ...

  5. java~springboot~ibatis数组in查询的实现

    在ibatis的xml文件里,我们去写sql语句,对应mapper类的方法,这些sql语句与控制台上没什么两样,但在有些功能上需要注意,如where in这种从数组里查询符合条件的集合里,需要在xml ...

  6. (四)surging 微服务框架使用系列之网关

    一.什么是API网关 API网关是一个服务器,是系统对外的唯一入口.API网关封装了系统内部架构,为每个客户端提供一个定制的API.API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入 ...

  7. k8s滚动更新(六)--技术流ken

    实践 滚动更新是一次只更新一小部分副本,成功后,再更新更多的副本,最终完成所有副本的更新.滚动更新的最大的好处是零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性. 下面我们部署三副本应用, ...

  8. Javascript之高级数组API的使用实例

    JS代码中我们可以根据需求新建新的对象解决问题的同时,也有一些常用的内置对象供我们使用,我们称之为API,本篇文章只是对数组部分进行了练习. 例一:伪数组,不能修改长短的数组(所以没办法清零),可以修 ...

  9. css控制元素 水平垂直居中

    控制元素居中核心代码为 position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; css: /* 容器 */ .w ...

  10. javascript排序算法-归并排序

    归并排序 概念:归并排序是一种分治算法.其思想是将原始数组切分成较小的数组,直到每个小数组只有一个位置,接着将小数组归并成较大的数组,直到最后只有一个排序完毕的大数组. 时间复杂度: O(nlogn) ...