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 相关文章推荐
使用jQuery避免鼠标双击的解决方案
Aug 21 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
Nov 20 Javascript
js实现二代身份证号码验证详解
Nov 20 Javascript
JavaScript学习心得之概述
Jan 20 Javascript
解析JavaScript模仿块级作用域
Dec 29 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
Aug 08 Javascript
微信小程序开发animation心跳动画效果
Aug 16 Javascript
vue购物车插件编写代码
Nov 27 Javascript
微信小程序使用wxParse解析html的实现示例
Aug 30 Javascript
vue axios 简单封装以及思考
Oct 09 Javascript
如何对react hooks进行单元测试的方法
Aug 14 Javascript
Node.js 中判断一个文件是否存在
Aug 24 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设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
详解php用static方法的原因
2018/09/12 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
Python struct.unpack
2008/09/06 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
python爬虫实现中英翻译词典
2019/06/25 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
2013届毕业生求职信范文
2013/11/20 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
团结演讲稿范文
2014/05/23 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
物流管理专业推荐信
2014/09/06 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
Nginx反向代理、重定向
2022/04/13 Servers
深入理解 Golang 的字符串
2022/05/04 Golang