手机版

Node.js与MySQL的交互操作及注意事项

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

Node.js作为服务器的js运行环境已经用了好几年了。最近我的一个朋友也在做这方面的开发,但是刚刚接触,遇到很多坑。几天前,当他们操作数据库时,遇到了一些问题。后来,我们一起看着他们。其实都是节点自身机制的一些问题。这里有一个总结,供初学者学习。

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

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

Db.js="数据库操作文件

Views=“存储模板文件,这是存储所有页面的地方。”

Public=“存储所有静态资源的位置,例如css js图像。”

首先介绍node.js连接mysql的步骤。第一步是安装一个名为MySQL的npm包,由政府提供,有稳定性保证。当然还有其他npm包,这里我们只使用MySQL包。安装方法很简单。输入指令npm安装mysql - save并等待下载完成。

看到这一点,安装成功了。

然后我们打开db.js文件,在数据库中编写一些操作所需的代码,见下图:

代码少,意义明显。第一步是引入mysql包,然后我们创建一个空对象,并为其分配一个名为query的方法。这个方法接受两个参数,第一个参数是查询数据时的sql语句,第二个参数是获取查询结果的回调函数。

查看函数内部,第一个代码用于设置操作mysql的配置:

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

用户代表mysql的用户名

密码表示mysql的密码

数据库表示要选择进行操作的特定库的名称

Port表示端口,但可以留空。默认值为3306

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

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

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

数据库操作完成后,关闭连接

整个过程很简单,但是有两个问题。第一个是数据库连接的丢失。不知道有没有人遇到过。第一次访问主页时,与数据库的连接正常。第二次访问主页时,数据库连接无法建立,将报告连接丢失的错误。原因是我们每次操作完数据库就关闭数据库连接,再次访问时找不到连接,但是连接无法关闭。有些人可能会觉得奇怪,我们每次访问主页,都会访问db.js文件。不是每次都有新的连接吗?是的,只是一开始生成连接的代码没有放在db.query的函数中,而是放在了外面,如下图所示:

因此,连接只生成一次,连接关闭后,复试无法连接。将它放入函数后,使用导出来公开接口。每次访问主页,都会再次经历创建连接的过程,每次都会获得一个新的连接,这样访问起来就没有问题了。事实上,连接池可以直接在项目中使用。省去了很多麻烦。

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

此时,您可能会看到,mysql.query有两个参数,第一个是sql,第二个是回调函数。回调函数有一个result的参数,它实际上是数据库查询的结果。有人会说为什么不直接在db.js中使用return,返回查询结果。多好的回调啊!

事实上,这里有一些由node.js的异步引起的问题如果我们将server.js中的代码更改为下图,

正如我们看到的mysql包的查询方法是异步操作,下面的res.render()方法不会等他查询到结果再执行,往往会在结果出来之前呈现页面,但是没有得到数据,所以会报错。因此,我们必须发送一个回调函数。mysql的查询方法完成后,我们会通过参数将结果发送给自己的回调函数,这样就可以在回调函数中得到结果。然后执行渲染。当然,为了处理这个问题,您也可以引入第三方包async来解决异步问题,这取决于个人。

版权声明:Node.js与MySQL的交互操作及注意事项是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。