我们在上一篇《[JavaScript从入门到放弃] Node篇 2.Express路由分离及传参》简单的学习了设置路由以及获取参数的几种方式,但显然我们只能利用他们做点简单的操作。如果要做个真正的网站,还是需要和数据库结合起来的。
本章,我们就来使用NodeJS来操作MySQL数据库吧,因为MYSQL免费,而且很轻,安装方便,所以很受初创企业和个人开发者的欢迎。
首页新建个models层,里面新建个user_dao文件,与routes/user.js对应。分层嘛,以后与User业务相关的数据库操作都写在这里面了。
然后user_dao里面写啥呢
这个就是基本的打开数据库的链接了,简单的应用中我们是不需要显式的开启关闭的。
你可能已经发现了,我们引入了mysql的包,所以是需要npm install的
目前操作mysql比较流行的,就是mysql.js和easymysql.js两个库,我们在这里只介绍前者的用法。
这两个库的源码已经文档,都可以在github上面搜索到,大家有兴趣自行研究高级用法吧。
下载安装成功之后,我们就可以做事了。
很简单吧,conn.query方法,增删改查都用这个
第一个参数是sql语句
第二个参数是SQL的参数,
第三个参数是个函数,也有三个参数,第一个参数是错误信息,第二个是SQL执行结果,第三个涉及的字段
那么我们执行成功之后,拿到result了,怎么返回出去呢?这里可没有response,所以我们在这个方法上传进来一个callback代表回调函数,查询完成后,执行这个回调函数,将结果传进去。
那这个callback是从哪传进去的呢?当然是routes/user
注意导包是一直需要的。
我们在调用这个getUserList的时候,传进去一个函数,并且这个函数也接收一个参数,此参数实际上就会变成SQL语句的查询结果,然后res.json或res.send返回给请求者呗。
一套流程就这么简单。如果需要传递路由参数,可以在getUserList的callback参数之前,加个args参数,传参呗:
那如果传递多个路由参数咋办呢?
这第二个SQL参数,其实可以接收单个参数或者数组。所以如果有多个参数,就使用数组的方式:
大概就是这么个意思。
我们再看看模糊查询:
再看看增删改,本质上其实都是SQL语句嘛,关键是增删改,其实只需要返回受影响行数:
好了,非常简单。我们现在其实已经可以操作数据库了。
但大家已经看到,我们用这种每次开启连接的方式其实并不是特别好。
mysql的js库中还提供了另一种形式,连接池:
跟其他语言中一样,连接池嘛,就是一次取出多个连接,给大家用,用完了就放回去,效率上理论上是有提高的。
不过听说这个mysql.js库在实际开发应用中,还是有很多坑的。我们暂时就是带大家入个门,自己慢慢踩坑吧。
OK,千里之行始于足下。
你以为这样就结束了吗?少年,你对力量一无所知。
显然我们要和其他语言技术一样,肯定要做连接字符串封装嘛。
这里就简单的封装连接,不对一些SQL操作做封装了,大家自行扩展吧。
原来的dao
好了好了,消化消化吧。