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 相关文章推荐
js 验证密码强弱的小例子
Mar 21 Javascript
关于jquery的多个选择器的使用示例
Oct 18 Javascript
js showModalDialog弹出窗口实例详解
Jan 07 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
Feb 13 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
Nov 17 Javascript
AngularJS模板加载用法详解
Nov 04 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
Nov 07 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
Nov 25 Javascript
详解Vue.js 2.0 如何使用axios
Apr 21 Javascript
高性能的javascript之加载顺序与执行原理篇
Jan 14 Javascript
Vue中的循环及修改差值表达式的方法
Aug 29 Javascript
javascript实现打砖块小游戏(附完整源码)
Sep 18 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连接access数据库
2008/03/27 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
php制作简单模版引擎
2016/04/07 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
python脚本作为Windows服务启动代码详解
2018/02/11 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
tensorflow 环境变量设置方式
2020/02/06 Python
python时间日期操作方法实例小结
2020/02/06 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
python绘制趋势图的示例
2020/09/17 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
运动会表扬稿
2015/01/16 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书