node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑。前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是node本身机制的一些问题,这里总结一下给新手做借鉴。

我朋友的数据库采用的是MySQL。(至于为什么不用mongoDB,这个是公司上层选型的结果,因为很多新手朋友似乎总是觉的node.js就是应该和mongoDB联系在一起,所以这里简单说下)。我后来写了一个简单的小例子,整个小例子使用了express框架,node_modules里面已经下载好了express和ejs模板。先来看下目录:

server.js   =》  node.js的服务器启动文件

db.js   =》  数据库操作文件

views  =》  存放模板文件,也就是所有的页面存放的地方

public =》  存放所有静态资源的地方,比如css js images之类的

首先介绍一下node.js连接MySQL的步骤,第一步,需要安装一个叫做MySQL的npm包,这个包是官方提供的,稳定性是可以保证的,当然,也还有其他的npm包,这里我们只使用mysql包。安装的方法很简单了,输入指令 npm install mysql --save,等待下载完成.

看到这个样子,那就是安装成功了。

然后我们打开db.js文件,在里面写入数据库中操作必须的一些代码,看下图:

代码很少,意思也很明显,第一步需要引入以mysql包,然后我们创建一个空对象,并且给他赋值一个叫query的方法,这个方法接受两个参数,第一个参数是你查询数据时候的sql语句,第二个参数是获取查询结果的回调函数。

再看函数内部,第一块代码是用来设置操作mysql的配置的:

host表示mysql安装的地址,因为我是本地的数据库,所以直接使用localhost

user表示mysql的用户名

password表示mysql的密码

database表示你要选择操作的具体的库的名字

port表示端口,可不填,默认就是3306

mysql.createConnection的返回值connection是我们接下来操作mysql的一个具体的对象,所有的操作方法都是基于他的。

调用connection的connect方法判断连接是否成功,如果失败,则把错误信息打印出来,并且停止运行。

调用connection的query方法来直接向数据库发送sql语句,并且把用回调函数返回结果,其中回调函数中有三个参数,第一参数是错误对象,如果操作失败,则会停止并打印错误信息,第二参数是具体的返回的结果,正常情况下是一个数组,里面包含很多json,第三个参数也是一个数组,里面包含着最每个数据的解释,比如当前数据属于哪个库,那张表等等。我们使用最多的自然是第二个参数了

当数据库操作结束以后关闭连接

整个过程很简单,只是其中有两个问题,第一个是数据库连接丢失的问题,不知道有没有人碰到过,第一次访问首页的时候,连接数据库正常,第二次访问首页,数据库连接不上了,会报错说连接丢失。这个原因是我们每操作完一次数据库就关闭了数据库连接,再次访问的时候就找不到连接了,但是连接又不能不关闭,有人可能觉得奇怪,每次访问首页时候都会访问db.js文件,不是每次都会有一个新连接产生吗?是的,只是我最开始的时候生成连接的那段代码并没有放到db.query的函数中,而是放在外面,如下图:

这样就导致连接只生成一次,关闭了以后,第二采访得不到连接。把它放在函数里面以后,使用exports对外暴露接口。每次访问首页,都会重新走一遍创建连接的过程,每次都能拿到一个新的连接,这样访问就没有问题了。其实项目中可以直接使用连接池。省去了很多麻烦。

第二个问题是我们在server.js中引入了db.js

此时大家可能看到了,mysql.query有两个参数,第一个是sql,第二个是回调函数,回调函数有一个result的参数,其实他就是数据库查询出来的结果。有人会说为什么不直接在db.js中使用return,把查询结果返回,搞什么回调啊!

其实这里就是node.js的异步造成的一些问题了,如果我们把server.js中的代码改成下图

因为我们看到了mysql包的query方法是异步操作,这就导致下面的res.render()方法不会等待他把结果查询出来以后再执行,往往是结果还没出来,就已经开始渲染页面,但是数据又没有得到,所以就会报错了。因此只好传送了一个回调函数进去,在mysql的query方法结束以后,把结果通过参数传入到我们自己写的回调函数中,这样我们就能在回调函数里得到结果了。然后再执行渲染。当然处理这个问题还可以引入第三方包 async来解决异步问题,具体看个人了。

https://www.cnblogs.com/shibaxiong/p/5929767.html

node.js连接MySQL操作及注意事项相关推荐

  1. Node.js 连接 MySQL 并进行数据库操作 –node.js 开发指南

    Node.js是一套用来编写高性能网络服务器的JavaScript工具包 通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选,本篇就来 ...

  2. 二十九、Node.js连接Mysql和MongoDB数据库CURD操作

    @Author:Runsen @Date:2020/6/10 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  3. Node.js 连接 MySQL 并进行数据库操作

    Node.js是一套用来编写高性能网络服务器的JavaScript工具包 代码片段(6) [代码] 安装 node-mysql view source print? 1 $ npm install m ...

  4. 运用node.js连接MySQL数据库

    1.首先,必须下载node.js,有node环境 2.在你所选文件夹终端中执行 npm install mysql安装MySQL模块 3.创建一个js文件(执行以下代码) // 1. 导入 mysql ...

  5. Node.js笔记-node.js连接MySQL与增删改查

    最近在看一个开源项目,项目用的是node.js,在此学习下他的连接mysql与增删改查. 安卓mysql包: npm install mysql 程序运行截图如下: D:\node\content\n ...

  6. Node.js 连接 MySQL 插入 TEXT 类型报错问题

    由于开发需要存储大量文本(其实是一个结构化对象字符串),考虑到 char 以及 varchar 都不够大,所以打算用 TEXT 类型,顺便记一下 TEXT.MEDIUMTEXT 以及 LONGTEXT ...

  7. Node.js连接MySQL

    将提供的 Websites 表 SQL 文件websites.sql 导入到 MySQL 数据库中. 发现问题: 在本地数据库路径中找到,有:C:\ProgramData\MySQL\MySQL Se ...

  8. 前端到全栈 -- js连接MYSQL数据库

    前端到全栈–node.js连接MYSQL数据库 前置条件: 安装node环境 安装mysql数据库 这里建议使用webstorm来写js 1.创建一个文件夹(这里以server为文件夹名举例),在命令 ...

  9. Node.js SQL数据库操作 (上)(操作MySQL数据库及 数据库连接池)

    文章目录 Node.js MySQL驱动 操作 MySQL 数据库 连接 MySQL 数据库 增删改查操作 防止 SQL 注入攻击 数据库连接池操作 Node.js MySQL驱动 Node.js的原 ...

最新文章

  1. jieba分词工具的使用方法
  2. 让资源管理器不显示最近常用文件夹
  3. 海量存储系列下--转载,值得一读
  4. 贪吃蛇系列之一——引入
  5. lambda 流 peek java_JDK8 流与λ表达式
  6. Linux linux下的进程状态
  7. 【转】宝贝,我要出嫁了……
  8. JAVA简历1到三年
  9. 测试TCP和UDP端口的方法
  10. 本易计算机不开机了,本易M3V(云游戏版)平板电脑刷机详细过程
  11. pcie转m2装系统win10_NVMe SSD安装Win10系统详解:小白秒懂
  12. 人月到底有多少神话色彩
  13. 镜像神经元现象是什么,镜像神经元的作用
  14. pip 和 conda 什么区别?
  15. Android体系架构及认识
  16. cdrom是什么意思_电脑按f8一键出现cdrom:ps-ASUS DVD-e818a4是什么意思
  17. 百度细雨算法2.0详解,规避细雨算法解决方法
  18. 05.Laravel post提交失败 返419 | Page Expired
  19. 文件服务器杀毒软件推荐,服务器杀毒软件哪个好 服务器装什么杀毒软件【详解】...
  20. 概率与数理统计的发展前景

热门文章

  1. KepServer介绍
  2. 图虫网、人人字幕Scrapy爬虫实战分享 附源码
  3. ssh远程执行nohup命令不退出
  4. mov和mp4格式哪个好_陈蛋蛋碎碎念—如何将腾讯视频格式转换成MP4格式
  5. 搜狗重磅开源的又一力作:一个服务器引擎
  6. 图扑数字孪生机械设备,为智慧工业保驾护航
  7. python回溯算法
  8. 用html怎么做心形边框,利用CSS3的border-radius实现绘制太极及爱心的图案
  9. 网易/美团/PingCAP/贝壳/爱奇艺大咖分享:云原生如何加速行业创新发展(附PPT下载)
  10. JavaEasyPoi将数据导出Excel