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对象的函数
Dec 22 Javascript
几款极品的javascript压缩混淆工具
May 16 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
JavaScript实现在标题栏上显示当前日期的方法
Mar 19 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
Oct 24 Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 Javascript
Vue 2.X的状态管理vuex记录详解
Mar 23 Javascript
如何使用Bootstrap创建表单
Mar 29 Javascript
JS实现数组按升序及降序排列的方法
Apr 26 Javascript
深入理解 webpack 文件打包机制(小结)
Jan 08 Javascript
js实现表单项的全选、反选及删除操作示例
Jun 05 Javascript
canvas实现贪食蛇的实践
Feb 15 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
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
php实现socket推送技术的示例
2017/12/20 PHP
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
vue实现移动端拖动排序
2020/08/21 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
python根据路径导入模块的方法
2014/09/30 Python
Python中str.format()详解
2017/03/12 Python
python之PyMongo使用总结
2017/05/26 Python
python在每个字符后添加空格的实例
2018/05/07 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
python实现图片素描效果
2020/09/26 Python
python 实现倒计时功能(gui界面)
2020/11/11 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
小学二年级评语
2014/04/21 职场文书
民事和解协议书格式
2014/11/29 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL