Node.js连接MySQL数据库及构造JSON的正确姿势

做一下整理,以前也很随意的引入包链接数据库,后来发现常常连接出问题,异常退出,后来使用在网上一个方法解决问题,网址由于书签丢失,抱歉不能引用了。再有就是简单的模块化下,使得目录合理点,再有就是说明一下,标题有赚眼球的嫌疑,代码我这里使用正常,而且我觉得也蛮好用,不过不代表真的就是该这么写,毕竟我还是个node菜鸟,大神路过有更好的方式方法,还请留下脚印,感激不尽!

Node版本:v0.10.34

Express版本:4.9.0

在继续进行之前,假设你搭建的本地环境已经可以看到这个界面:

--------------------------------------------------------------------------------------------------------

好了,继续进行。首先,看一下我的目录:

controllor目录和setting.js是新建的,下面放些处理功能,比如操作数据库的database.js,和用于处理数据,返回JSON的dd_tongji.jssettings.js用于存储一些配置信息

如果新建的工程,那么需要在路由(routers/index.js)中添加两行代码来引入我们的模块和配置URL

var express = require(‘express‘);
var router = express.Router();
var dd_tongji = require(‘../controller/dd_tongji.js‘); //引入自定义模块

/* GET home page. */
router.get(‘/‘, function(req, res) {
  res.render(‘index‘, { title: ‘Express‘ });
});

router.get(‘/data‘, dd_tongji.get_click); //配置RUL,访问http://localhost:3000/data

module.exports = router;

然后添加如下代码到controller/dd_tongji.js

exports.get_click = function(req, res) {
  return res.jsonp({"hello":"world"});
};

重启服务后访问:http://127.0.0.1:3000/data

这样,后端的工作就是这样了,前台访问这个网址就可以获取数据了~

- 说好的数据库呢?说好的构造JSON呢?

- 别急,且往下看

----------

(一)Node.js连接MySQL数据库

dd_tongji.js中我们想引入MySQL中的数据,处理成我们想要的JSON格式,好,来看下database.js中的内容:

var mysql = require(‘mysql‘),
    settings = require(‘../settings‘);

module.exports.getConnection = function () {
    if ((module.exports.connection) && (module.exports.connection.socket) && (module.exports.connection._socket.readable) && (module.exports.connection._socket.writable)) {
        return module.exports.connection;
    }
    console.log(((module.exports.connection) ? "UNHEALTHY SQL CONNECTION; RE" : "") + "CONNECT TO SQL.");
    var connection = mysql.createConnection({
            host: settings.mysql.host,
            port: settings.mysql.port,
            database: settings.mysql.database,
            user: settings.mysql.user,
            password: settings.mysql.password,
            charset: "utf8"
    });
    connection.connect(function (err) {
            if (err) {
                console.log("SQL CONNECT ERROR: ", err);
            } else {
                console.log("SQL CONNECT SUCCESSFUL.");
            }
    });
    connection.on("close", function(err) {
            console.log("SQL CONNECTION CLOSED.");
    });
    connection.on("error", function(err) {
            console.log("SQL CONNECTION ERROR: ." + err);
    });
    module.exports.connection = connection;
    return module.exports.connection;
};

module.exports.getConnection();

数据库的配置信息在settings.js中,我们已经通过settings = require(‘../settings‘);引入

看下settings.js的内容:

module.exports = {
mysql: {
          host: ‘127.0.0.1‘,
          port: 3306,
          user: ‘user‘,
          password: ‘123456‘,
          database: ‘mydata‘
       }
}

dd_tongji.js中使用引入(部分代码)

var connection = database.getConnection();connection.query(sql, function(err, rows, fields) {  ...//rows为查询出的数据,可通过rows[i].字段 访问数据}

因为这里先说明的是引入数据库,所以完整的dd_tongji.js代码在构造JSON的时候再书写

而且这种方式貌似是不需要关闭连接的。(忘了为什么了,抱歉...)

好了,数据库部分先暂时这样,一会儿会有示例演示取数据,拼接JSON,并返回。

(二)Node.js构造JSON

假使URL接口是http://127.0.0.1:3000/data?genus=DEFAULT&evt=ABOUT&begin=2014-09-09&end=2014-09-20

那么也就是说我们需要查询的数据就是数据库genus字段为DEFAULT,ent字段为ABOUT,日期为2014-09-09到2014-09-20期间的数据

看一下新的dd_tongji.js代码:

var database = require(‘./database‘)

/* 传入字符串获取间隔的天数 */
function DateDiff(sDate1, sDate2){ //sDate1和sDate2是2002-12-18格式
  var aDate, oDate1, oDate2, iDays
  aDate = sDate1.split("-")
  oDate1 = new Date(aDate[1] + ‘-‘ + aDate[2] + ‘-‘ + aDate[0]) //转换为12-18-2002格式
  aDate = sDate2.split("-")
  oDate2 = new Date(aDate[1] + ‘-‘ + aDate[2] + ‘-‘ + aDate[0])
  iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24) //把相差的毫秒数转换为天数
  return iDays
}

/* 根据参数返回日期的字符串 */
function GetDateStr(BeginDate, AddDayCount) {
  var begin = Date.parse(BeginDate);
  var dd = new Date(begin);
  dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后的日期
  var y = dd.getFullYear();
  var m = dd.getMonth()+1;//获取当前月份的日期
  var d = dd.getDate();
  if(m<10) m = ‘0‘ + m;
  if(d<10) d = ‘0‘ + d;
  return y + "-" + m + "-" + d;
}

exports.get_click = function(req, res) {

  // console.log(DateDiff(req.query.begin, req.query.end));

  // 构造日期列表
  var datelist = []
  var BeginDate = req.query.begin;
  var EndDate = req.query.end;
  var DateNum = DateDiff(BeginDate, EndDate) + 1; // 需要查询的日期天数
  for (var i=0; i<DateNum; i++) {
    time = GetDateStr(BeginDate, i);
    datelist.push(time)
  }

  console.log(datelist);
  console.log(datelist.length);

  // data 用于保存查询到的数据
  var data = {};
 
  for(var i=0; i< datelist.length; i++) {
    data[datelist[i]] = {
      click_num: 0,
      people_num: 0,
      average_num: 0
    }
  }

  // 定义查询语句
  var sql = "SELECT * FROM click WHERE genus=‘" + req.query.genus + "‘ AND evt=‘" + req.query.evt + "‘ and date>=‘" + req.query.begin + "‘ and date <=‘" + req.query.end + "‘"
  console.log(sql);

  // 连接数据库
  var connection = database.getConnection();
  connection.query(sql, function(err, rows, fields) {
    if (err) throw err;

    for(var i=0; i < rows.length; i++) {
      data[rows[i].date] = {
        click_num: rows[i].click_num,
        people_num: rows[i].people_num,
        average: rows[i].average
      }
    }

    var result = {
      genus: req.query.genus,
      evt: req.query.evt,
      data: data
    }

    return res.jsonp(result);
  });
};

不多讲解了,例子还是很好理解的,data初始化操作是为了填补有些日期没有数据的问题。

来看下数据库中的表结构和JSON的结果

OK,可以了,如果大家发现我写的哪里有问题,记得通知我哦,感激不尽

时间: 2024-10-13 22:04:16

Node.js连接MySQL数据库及构造JSON的正确姿势的相关文章

node.js连接MySQL操作及注意事项

node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑.前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是node本身机制的一些问题,这里总结一下给新手做借鉴. 我朋友的数据库采用的是MySQL.(至于为什么不用mongoDB,这个是公司上层选型的结果,因为很多新手朋友似乎总是觉的node.js就是应该和mongoDB联系在一起,所以这里简单说下).我后来写了一个简单的小例子,整个小例子使用了express框

Node.js连接Mysql,并把连接集成进Express中间件中

引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以单独对mysql配置,也可以把connection集成到express中间件中. 最后送上一个node.js 连接各种主流数据库示例代码. 前提条件 1.安装mysql对应的驱动,npm install mysql 2.安装第三方插件express-connection, npm install e

node.js 连接 mysql

var mysql = require("mysql"); var connection = mysql.createConnection({ host: '127.0.0.1', user: "root", //数据库用户名 password: "12345", //数据库密码 database: "test", //数据库 port: '3306' //端口号 }); connection.connect(function

node.js连接mysql

第一步 到node.js官网 下载相对应的node.js版本 通用的傻瓜式安装,下一步下一步即可 第二步 开始node.js 初体验 新建一个文件命名为  hello.js 内容如下 var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World node.js \n'); }).

Node.js 连接 MySQL 并进行数据库操作

通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选,本篇就来介绍下如何通过NodeJS来操作 MySQL 数据库. 安装MySQL模块到NodeJS中 我们需要让NodeJS支持MySQL,则需要将MySQL模块添加到系统支持库 安装 node-mysql $ npm install mysql 创建测试表 //数据库名 NodeSample CREATE TABLE `NodeSample`.`MyTable` ( `id` I

node.js 调用mysql 数据库

1.在package.json中添加mysql依赖 命令:npm install mysql --save 2.项目中添加mysql文件夹 > 文件夹下创建config文件夹,并在config下创建index.js写入mysql配置文件 const mysql = require('mysql') const connectdb=()=>{ let connection = mysql.createConnection({ host : 'localhost', port : '3306',

node.js操作mysql数据库之增删改查

安装mysql模块 npm install mysql 数据库准备 mysql server所在的机器IP地址是192.168.0.108,登录账户就用[email protected] 在mysql中创建test数据库 在test数据库中创建一张users表 操作 连接数据库 var mysql=require('mysql'); var connection = mysql.createConnection({ host : '192.168.0.108', user : 'root', p

Win7下Node.js连接oracle数据库

最近一个项目需要使用Nodejs连接oracle数据库,在网上查了很久,按照网上的做法一直都无法成功,报错信息是node-gyp rebuild相关的,最后经过不断试验,发现手动编译后可以成功. 首先需要安装node-oracle需要的依赖,包括python2.7(选择将其加入环境变量), oracle的instantclient_12_1的basic和sdk,VS2012,nodejs,因为我连的是远程oracle,所以没有装oracle. 安装完后需要设置系统变量OCI_INCLUDE_DI

Node.js 连接MySQL时 出现 connect ECONNREFUSED 127.0.0.1:3306

这个问题主要是由于你本地的数据库没有启动所导致的 解决办法: 重新启动MySQL数据库就可以了 原文地址:https://www.cnblogs.com/xiongjun/p/11741921.html