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

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

转载于:https://www.cnblogs.com/jackson-yqj/p/10123603.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,可以用于搭建Web服务器。首先,你需要安装Node.js和npm(Node包管理器)。然后,你可以按照以下步骤来搭建一个简单的Node.js Web服务器: 1. 创建一个新的项目文件夹,并在该文件夹中初始化一个新的Node.js项目。可以使用以下命令:`npm init`。这将创建一个package.json文件,其中包含了你的项目的相关信息。 2. 在项目文件夹中创建一个名为`service.js`的文件,该文件将作为你的服务器代码的入口文件。 3. 在`service.js`文件中引入所需的模块,例如`express`和`mongoose`。你可以使用`require`语句来引入模块,如下所示: ``` const express = require("express"); const mongoose = require("mongoose"); ``` 4. 设置连接数据库的配置。你可以在`service.js`文件中引入数据库配置,并通过使用`mongoose.connect()`方法来连接数据库: ``` const db = require("./config/keys").mongoURL; mongoose.connect(db, { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log("连接成功")) .catch(err => console.log("连接错误")); ``` 5. 创建一个Express应用程序实例,并将其分配给一个变量,例如`app`: ``` const app = express();``` 6. 定义路由。你可以使用`app.get()`或`app.post()`等方法来定义不同的路由和请求处理程序。例如,以下代码定义了一个根路由,当用户访问根路径时,发送"hello world"响应: ``` app.get("/", (req, res) => { res.send("hello world"); }); ``` 7. 使用路由。你可以将路由模块导入并在应用程序中使用它们。例如,以下代码将在`/api/users`路径下使用`users`路由模块: ``` const users = require("./routes/api/users"); app.use("/api/users", users); ``` 8. 启动服务器并监听指定的端口。你可以使用`app.listen()`方法指定要监听的端口,并在服务器启动时执行一些操作。例如,以下代码将服务器监听在5000端口,并在服务器启动时打印一条消息: ``` const port = process.env.PORT || 5000; app.listen(port, () => { console.log(`服务运行在端口 ${port}`); }); ``` 现在,你可以在终端中运行`node service.js`命令来启动你的Node.js服务器。通过访问`http://127.0.0.1:5000/`,你应该能够看到"hello world"的响应。 另外,如果你想在代码更改时自动重启服务器,你可以安装`nodemon`模块,并将其作为开发依赖项添加到`package.json`文件中。然后,你可以使用`nodemon service.js`命令来启动服务器,这样在你修改代码后不需要手动重启服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值