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模块
  2. var app = express();//初始化化
  3. var settingConfig = require('./config/settingConfig.js');//引入配置文件
  4. var allow_Orgin = settingConfig.getValueByKey("Access_Control_Allow_Origin");//解析
  5. // Access Control Allow
  6. var cors = require('cors');//引入跨域资源共享
  7. var whitelist = allow_Orgin.split(';');
  8.  
  9. var hostName = '127.0.0.1';//设置主机名
  10. var port = 8080;//设置端口
  11.  
  12. var corsOptions = {//配置
  13. credentials: true,
  14. origin: function (origin, callback) {
  15. if (origin==undefined || whitelist.indexOf(origin) !== -1) {
  16. callback(null, true)
  17. } else {
  18. console.log(origin);
  19. callback(new Error('Not allowed by CORS'))
  20. }
  21. }
  22. }
  23. app.use(cors(corsOptions));
  24. app.use('/api', require('./routes/dbWebApi.js'));
  25.  
  26. // catch 404 and forward to error handler
  27. app.use(function(req, res, next) {
  28. var err = new Error('Not Found');
  29. err.status = 404;
  30. var result = {
  31. httpCode: 404,
  32. message: err.message,
  33. }
  34. res.status(404).json(result);
  35. next();
  36. });
  37.  
  38. // error handler
  39. app.use(function(err, req, res, next) {
  40. // set locals, only providing error in development
  41. res.locals.message = err.message;
  42. res.locals.error = req.app.get('env') === 'development' ? err : {};
  43. // render the error page
  44. res.status(err.status || 500).json({
  45. httpCode: err.status || 500,
  46. message: err.message,
  47. });
  48. });
  49.  
  50. app.listen(port,hostName,function(){//监听
  51. console.log(`服务器运行在http://${hostName}:${port}`);
  52. });

解析配置文件的代码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. }

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) { });
  7. });
  8.  
  9. router.post('/postData', function (req, res) {
  10. dbservice.operateDatabase(appName, spName, json, function (data) {
  11.  
  12. });
  13. });

下一章: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. Docker 删除&清理镜像

    文章首发自个人网站:https://www.exception.site/docker/docker-delete-image 本文中,您将学习 Docker 如何删除及清理镜像? 一.通过标签删除镜 ...

  2. Docker 搜索镜像

    文章首发个人网站: https://www.exception.site/docker/docker-search-image 本文中,您将学习 Docker 如何搜索镜像? 一.search 命令 ...

  3. 处理SQL Server中的重复行

    如果表中的数据需要基于行中的多个值具有唯一约束,则适合的解决方案将是复合健. 复合主键 使用SQL Server语法创建符合主键非常简单. create table my_parts ( id_par ...

  4. AR增强现实开发介绍(续)

    AR增强现实开发介绍(续) ---开发基础篇 开发增强现实技术,无论是商业级应用,还是面向幼儿教育的游戏产品,都需要从了解.获取.下载增强现实插件开始.目前全世界使用量最大公认最好的增强现实插件是高通 ...

  5. 微信公众号开发C#系列-6、消息管理-普通消息接受处理

    1.概述 通过前面章节的学习,我们已经对微信的开发有了基本的掌握与熟悉,基本可以上手做复杂的应用了.本篇我们将详细讲解微信消息管理中普通消息的接收与处理.当普通微信用户向公众账号发消息时,微信服务器将 ...

  6. Linux运维企业架构实战系列

    Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...

  7. Notepad++替换SQL Server Select窗口列名的中括号的小技巧

    条件:“查找模式”那选中“扩展” 一.简单替换 查找目标(包括空格,各个SSMS版本可能不同): ]\r\n ,[ 替换为:, 二.替换为@ 查找目标(包括空格,各个SSMS版本可能不同): ]\r\ ...

  8. Convert.ToInt32()和int.Parse()区别

    Convert.ToInt32()和int.Parse()都可以数据转换个int类型,区别在于: 1. Convert.ToInt32()将object类类型转换成int类型,例如:Convert.T ...

  9. c#封装DBHelper类

    public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> None, /// <s ...

  10. 使用go, gin, gorm编写一个简单的curd的api接口

    go 是一门非常灵活的语言,既具有静态语言的高性能,又有动态语言的开发速度快的优点,语法也比较简单,下面是通过简单的代码实现了一个简单的增删改查 api 接口 hello world 常规版 新建 d ...