Node.js,作为
运行服务器端环境的JS,已经出现好几年了。最近,我的一个朋友也在开发这一领域,但它刚刚碰上了许多坑,几天前,他们在运行数据库时遇到了一些问题。后来,我们一起看了看。这些
都是节点自身机制的问题。下面我们总结一下初学者的经验。
我朋友的数据库使用MySQL。至于为什么不使用MongoDB的上层阶级,这是选择的结果,因为许多新朋友似乎总是觉得Node.js是与MongoDB,所以这里是一个简单的人。我后来写了一个简单的小例子,整个小例子用快递框架,并node_modules
下载快车,EJS模板。看下
目录。
server.js =Node.js服务器
启动文件 db.js =数据库
操作文件
视图存储模板文件,这是所有页面存储的地方。
公共=所有静态资源存储的地方,例如CSS js图像,等等
首先,我们
介绍了Node.js
连接MySQL数据库的
步骤。第一步,我们需要
安装一个新的封装称为MySQL,这是官方提供的。保证了稳定性。还有其他的新包,当然。我们只使用MySQL软件包,安装
方法简单,与
输入的指令安装MySQL,NPM
保存等待下载完成。
看到这个,就是安装成功了。
然后我们打开db.js文件和写一些代码,数据库必须在数据库,看看下面的:
代码很小,意思很明显,第一步是引入mysql包,然后我们
创建一个空对象,他被分配给一个名为
查询的方法,这个方法接受两个
参数,第一个参数是SQL语句,当你查询数据时,第二个参数是一个回调
函数,获取查询结果。
在函数内部,第一段代码用于
设置MySQL操作的
配置:
主持人代表MySQL安装的
地址,因为我是一个
本地数据库,所以使用localhost直接。
用户表示MySQL的
用户名。
密码表示MySQL的密码。
数据库
显示要选择的特定库的名称。
端口代表端口,不被填充,
默认值是3306。
对mysql.createconnection,连接的返回值,是一个特定的对象,然后我们使用MySQL,所有这些都是基于他。
调用连接的方法来确定连接是否成功,如果失败,则
打印错误信息并停止运行。
查询电话连接的方法向数据库发送SQL语句,并将结果用回调函数返回,回调函数有三个参数,第一个参数是错误的对象,如果操作失败,它将停止打印错误
消息,第二个参数是特定的返回结果,正常
情况下是一数组,其中包含很多JSON,第三个参数是一个数组,其中包含大多数的每个数据的解释,如当前的数据属于库、列表等等。我们使用的是最自然的二参数
当数据库操作结束时
关闭连接。
整个过程非常简单,但是有两个问题,第一个是数据库的连接丢失的问题,不知道是否有人第一次访问这个
网页,数据库的连接是正常的,到首页的第二次访问,数据库连接是没有错的,说的
原因是连接损耗。我们的一个数据库操作端封闭再次访问数据库连接时,找不到连接,但连接无法关闭,有些人可能会觉得陌生,时间会访问每个访问db.js文件,不是每次都会有一个新的连接是的,只是我开始生成连接的代码,不是在DB的查询函数中,而是在外部,如下所示:
这会导致连接将仅生成一次,和关闭后关闭,复试不能连接。当你把它放在
功能、使用出口暴露接口。每次你访问的主页,你去创建一个连接的过程,每一次你得到新的连接,没有问题。事实上,连接池能在项目中直接使用,节省了很多麻烦。
第二个问题是,我们推出了db.js在server.js
在这一点上,你可以看到,mysql.query有两个参数,第一个是SQL,二是回调函数,回调函数的参数有一个结果,这实际上是数据库查询的结果。有的人会说为什么不使用直接返回在db.js,返回的查询结果,什么回调!
事实上,这里是一些由异步Node.js带来的问题,如果我们改变代码server.js以较低的数字
因为我们看到查询MySQL软件包是一个异步操作,从而引出下文(res.render)方法不是等他出来后查询的
执行往往是结果还没出来,已经开始渲染页面,但数据还没有公布,所以这将是错误的。所以我们不得不把一个回调函数为。在MySQL的查询方法完成,结果被传递给回调函数,我们写我们自己,这样我们就可以在回调函数中得到的结果,然后执行渲染一遍。当然,
解决这个问题也可以引入第三方包异步解决
同步问题,要看个人。