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 06 Javascript
JS过滤url参数特殊字符的实现方法
Dec 24 Javascript
jQuery实现的一个自定义Placeholder属性插件
Aug 11 Javascript
详解参数传递四种形式
Jul 21 Javascript
jQuery基于ajax实现星星评论代码
Aug 07 Javascript
JavaScript编程中布尔对象的基本使用
Oct 25 Javascript
Javascript发送AJAX请求实例代码
Aug 21 Javascript
Vue.js第三天学习笔记(计算属性computed)
Dec 01 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
vue axios数据请求get、post方法及实例详解
Sep 11 Javascript
Vue-不允许嵌套式的渲染方法
Sep 13 Javascript
JavaScript ES6的函数拓展
Jan 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 中执行系统外部命令
2006/10/09 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
react基本安装与测试示例
2020/04/27 Javascript
python复制文件的方法实例详解
2015/05/22 Python
python 开发的三种运行模式详细介绍
2017/01/18 Python
Python 字符串与数字输出方法
2018/07/16 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
Python变量访问权限控制详解
2019/06/29 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
中国高端家电购物商城:顺电
2018/03/04 全球购物
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
我是一名护士演讲稿
2014/08/28 职场文书
入学证明
2015/06/23 职场文书
公司开业致辞
2015/07/29 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP