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定时器详解及实例
Aug 01 Javascript
node.js中的fs.utimes方法使用说明
Dec 15 Javascript
javascript中BOM基础知识总结
Feb 14 Javascript
vue router路由嵌套不显示问题的解决方法
Jun 17 Javascript
JS实现对json对象排序并删除id相同项功能示例
Apr 18 Javascript
Less 安装及基本用法
May 05 Javascript
在angular 6中使用 less 的实例代码
May 13 Javascript
详解ECMAScript typeof用法
Jul 25 Javascript
详解webpack自定义loader初探
Aug 29 Javascript
JS实现可针对算术表达式求值的计算器功能示例
Sep 04 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
JavaScript数组常用的增删改查与其他属性详解
Oct 13 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
PHP 加密解密内部算法
2010/04/22 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
js实现弹窗效果
2020/08/09 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
Python简单实现enum功能的方法
2016/04/25 Python
你应该知道的python列表去重方法
2017/01/17 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
python 命名规范知识点汇总
2020/02/14 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
应届大专毕业生自我鉴定
2014/04/08 职场文书
物理学专业自荐信
2014/06/11 职场文书
安全环保演讲稿
2014/08/28 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python
java基础——多线程
2021/07/03 Java/Android
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL