node+express框架中连接使用mysql(经验总结)


Posted in Javascript onNovember 10, 2018

最近在学习node.js,做了一个练手项目,使用node.js+express框架,配合mysql数据库和前端vue框架开发一个多人文档编辑系统。

node.js环境下express+mysql的服务端项目示例

首先是环境搭建:

node环境下

$ npm install -g express-generator
$ express -e project

进入项目文件根目录安装依赖模块

$ npm install
$ DEBUG=node-blog:* npm start

看看项目目录都有什么

node+express框架中连接使用mysql(经验总结)

看看生成的工程目录里面都有什么,

bin:存放可执行文件

node_modules:存放 package.json 中安装的模块,当你在 package.json 添加依赖的模块并安装后,存放在这个文件夹下

public:存放 image、css、js 等前端资源文件

routes:存放路由文件

views:存放视图文件或者说模版文件

app.js:启动文件,或者说入口文件

package.json:存储着工程的信息及模块依赖,当在 dependencies 中添加依赖的模块时,运行npm install ,npm 会检查当前目录下的 package.json,并自动安装所有指定的模块

下面开始安装数据库,这里我选择的是mysql。

npm install mysql --save-dev

安装完毕之后,开始配置数据库。

//mysql配置文件
mysql = {

    host: "xx.xxx.xx.xxx", //这是数据库的地址

    user: "xxx", //需要用户的名字

    password: "xxx", //用户密码 ,如果你没有密码,直接双引号就是

    database: "xxx" //数据库名字

  } //好了,这样我们就能连接数据库了

  module.exports = mysql; //用module.exports暴露出这个接口,
mysql连接池配置:

//mysql连接池配置文件
var mysql = require('mysql');
var $dbConfig = require('../config/mysql');//注意改成自己项目中mysql配置文件的路径

// 使用连接池,避免开太多的线程,提升性能
var pool = mysql.createPool($dbConfig);

/**
 * 对query执行的结果自定义返回JSON结果
 */
function responseDoReturn(res, result, resultJSON) {
  if (typeof result === 'undefined') {
    res.json({
      code: '201',
      msg: 'failed to do'
    });
  } else {
    res.json(result);
  }
};

/**
 * 封装query之sql带不占位符func
 */
function query(sql, callback) {
  pool.getConnection(function(err, connection) {
    connection.query(sql, function(err, rows) {
      callback(err, rows);
      //释放链接
      connection.release();
    });
  });
}

/**
 * 封装query之sql带占位符func
 */
function queryArgs(sql, args, callback) {
  pool.getConnection(function(err, connection) {
    connection.query(sql, args, function(err, rows) {
      callback(err, rows);
      //释放链接
      connection.release();
    });
  });
}

//exports
module.exports = {
  query: query,
  queryArgs: queryArgs,
  doReturn: responseDoReturn
}

操作数据库的过程比较灵活,我是使用模块化的思想,将一张数据表封装成一个模块暴露出去,通过该模块获取这张表的增删改查SQL语句。下面贴上示例代码:

let express = require('express');
let mysql = require('../common/basicConnection');

let qibu_task = {
  index: '',
  value: '',
  list: `SELECT * from qibu_task;`, //列表查询
  insert(args) {
    qibu_task.index = '';
    qibu_task.value = '';
    args = filter(['id', 'task', 'name', 'created_at'], args)
    for (let key in args) {
      qibu_task.index = `${qibu_task.index}${key},`
      let re = /^[0-9]+.?[0-9]*/;
      if (re.test(args[key])) {
        qibu_task.value = `${qibu_task.value}${args[key]},`
      } else {
        qibu_task.value = `${qibu_task.value}'${args[key]}',`
      }
    }
    qibu_task.index = qibu_task.index.substr(0, qibu_task.index.length - 1);
    qibu_task.value = qibu_task.value.substr(0, qibu_task.value.length - 1);

    return `INSERT INTO qibu_task (${qibu_task.index}) VALUES(${qibu_task.value})`;
  }, //按需增加
  select(index, value) {
    return `SELECT * from qibu_task where ${index}=${value};` //按需查询
  },
  delete(index, value) {
    return `DELETE from qibu_task where ${index}=${value};` //按需删除
  },
  update(index, args) { //提交修改
    if (index in args) {
      qibu_task.value = '';
      args = filter(['id', 'task', 'name', 'created_at'], args)
      for (let key in args) {
        let re = /^[0-9]+.?[0-9]*/;
        if (re.test(args[key])) {
          qibu_task.value = `${qibu_task.value}${key}=${args[key]},`
        } else {
          qibu_task.value = `${qibu_task.value}${key}='${args[key]}',`
        }
      }
      qibu_task.value = qibu_task.value.substr(0, qibu_task.value.length - 1)
      return `UPDATE qibu_task SET ${qibu_task.value} WHERE ${index}=${args[index]};`
    }
  },
};
//参数过滤
function filter(arguments, obj) {
  let newObj = {}
  arguments.forEach(every => {
    if (every in obj) {
      newObj[every] = obj[every]
    }
  });
  return newObj;
};
module.exports = qibu_task;

然后就可以在路由返回时进行数据库操作啦。具体代码就不贴啦。路由可以识别get、post方法,修改和删除通过传递参数模拟。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript的Cookies
Jan 16 Javascript
实现局部遮罩与关闭原理及代码
Feb 04 Javascript
json格式的时间显示为正常年月日的方法
Sep 08 Javascript
多个checkbox被选中时如何判断是否有自己想要的
Sep 22 Javascript
详解JavaScript中Date.UTC()方法的使用
Jun 12 Javascript
简单实现JS对dom操作封装
Dec 02 Javascript
Js利用Canvas实现图片压缩功能
Sep 13 Javascript
前端把html表格生成为excel表格的实例
Sep 19 Javascript
Bootstrap 树控件使用经验分享(图文解说)
Nov 06 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
Feb 24 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
Mar 17 Javascript
JavaScript实现队列结构过程
Dec 06 Javascript
vue axios请求频繁时取消上一次请求的方法
Nov 10 #Javascript
微信小程序实现跑马灯效果
Oct 21 #Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
Nov 09 #Javascript
vue.js自定义组件directives的实例代码
Nov 09 #Javascript
详解处理Vue单页面应用SEO的另一种思路
Nov 09 #Javascript
webpack 静态资源集中输出的方法示例
Nov 09 #Javascript
vue中如何去掉空格的方法实现
Nov 09 #Javascript
You might like
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
php检测文本的编码
2015/07/26 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
angularjs基础教程
2014/12/25 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
详解javascript函数的参数
2015/11/10 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
学习python 之编写简单乘法运算题
2016/02/27 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
python excel多行合并的方法
2020/12/09 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
《曹刿论战》教学反思
2014/03/02 职场文书
导游个人求职信范文
2014/03/23 职场文书
大学活动总结格式
2014/04/29 职场文书
社区母亲节活动总结
2015/02/10 职场文书
思想工作总结范文
2015/08/12 职场文书