Node篇 3.NodeJS整合MySQL

我们在上一篇《[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

好了好了,消化消化吧。

本文来自企鹅号 - 慎独网只说真话媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏magicsoar

C++ socket网络爬虫(1)

C++写的socket网络爬虫,代码会在最后一次讲解中提供给大家,同时我也会在写的同时不断的对代码进行完善与修改 我首先向大家讲解如何将网页中的内容,文本,图片...

4835
来自专栏有趣的Python

1-浙大攻略计划-专业课-Linux C语言编程基本原理与实践(慕课网)

将max.c变成max.o之后,我们需要把hello.c中的include注释掉并添上方法声明

1733
来自专栏Python攻城狮

Redis的安装及基本使用1.Redis2.Redis安装3.redis常见配置4.redis数据操作5.redis发布订阅6.主从双备

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串(strings), ...

661
来自专栏JavaEdge

操作系统之文件管理概述1 文件和文件系统3 目录管理4 文 件 共 享5 文件保护5.1.1 访问矩阵的实现6 文件物理结构(重点)2文件存储空间管理(重点)

35010
来自专栏www.96php.cn

【fastadmin】踩坑第二发-CMS插件后台文章状态修改未通过前台报错

我们找到模板application\index\view\cms\archives\my.html 大概46-52行

4883
来自专栏北京马哥教育

Python imports指南

来源:Python程序员 ID:pythonbuluo 声明:如果你每天写Python,你会发现这篇文章中没有新东西。 这是专为那些像运维人员等偶尔使用Pyt...

2565
来自专栏Coco的专栏

【前端安全】JavaScript防http劫持与XSS

9014
来自专栏西枫里博客

thinkPHP5模版页面volist循环offset不能使用变量

有这样一个应用场景:当volist循环需要排除前面几个数据的时候,我们通常使用offset来操作。而假设前面要排除的数据是根据当前页面占位符来确定的,而需要排除...

802
来自专栏北京马哥教育

面试分享系列 | 17道Python面试题,让你在求职中无往不利

今天给大家分享的是Python面试题系列的第一篇文章,后续我也会陆续整理Python相关的问题给大家,无论是求职者还是新人都可以通过面试题来考察自己的能力缺陷。...

3574
来自专栏风口上的猪的文章

.NET面试题系列[17] - 多线程概念(2)

当我们创建了一个线程后,线程里面主要包括线程内核对象、线程环境块、1M大小的用户模式栈和内核模式栈。

3462

扫码关注云+社区

领取腾讯云代金券