目录
开端:
- mysql介绍、安装和使用;
- Nodejs链接MySQL;
- API链接MySQL;
为什么使用的是MySQL而不是mogondb?
- web server 中最流行的关系型数据库
- 官网可免费下载,用于学习
- 轻量级,易学易用
MySQL workbench:
- 操作MySQL的客户端,可视化操作;
- 下载:http://dev.mysql.com/downloads/workbench/
show databases;可以查看所有数据库(要记得 root 的密码,忘记了,看来只能主机登录).
包含:建库、建表、表操作;建一个 myblog 的数据库,然后就可以来建表(两个表:用
vachar 代表字符串类型,longtext 可以储存 4G 大小的数据。
操作表:
- 增删改查;
- 使用SQL语句;
use+数据库名字就能使用数据库,show tables 就能展示各种表,--加空格就是注释。如果我们变量呃出现了 sql 里面的关键字我们可以加上``就可正常使用。这里由于 id 会自动增加, 所以我们不需要写 id(它的特点是如果定下来数字,不管前面是不是被删了都不会改变原本的值)。

like 是模糊查询,排序的话默认是正序,加多个 desc 可以倒序。

封装需要考虑线上数据库和线下数据库。 建一个空白文件夹 mysql-test,下面建一个 index.js 同时 npm 初始化,安装 mysql 插件 npm i mysql。 回到 index.js,引入这个插件,创建链接对象,connect 方法 开始连接,通过 query 方法即可执行 sql 语句,然后记得搞 完关闭连接。 注意我们在 node 里面进行修改的话是不会返回修改的内容, 而是返回一个对象,里面有说几行受影响和改变的样子。插入的话也是返回一个对象,里面有 insertId 恰好对应我们的 id。由于不知道密码,我们利用 navicat 重新建了个库。


- const mysql =nequire( 'mysql') //引入数据库插件
-
- const const = mysql.createConnection({ //创建连接(root默认密码为空>)
- host: "localhost',
- user: 'root ',
- password: "',
- port: '3306',//默认端口号
- database: 'myBlog' //连接到inybLog数据库(navicat里面的)
- })
- con.connect()//连接数据库
- const sql = 'select * from blogs'//定义查询语句
- con.query(sq1,(err,result)=>{ //执行查询语句
- if (err){
- console.log(err)}
- else {
- console.log(result)
- }
- con.end()/7关闭连接
- const mysql =hequire( 'mysql')
- const { MYSQL_CONF } = require('../conf/db')
-
- const con = mysql.createConnection(msQL_CONF)//创建连接对象
- con.connect() //d连接数据库
-
- function exed (sql){//执行教据库操作
- const promise = new Promise((resolve,reject) =>{
- con.query(sql, (err, result)=>{
- if (err){
- reject(err)
- return // 记得return,不然有错误就卡在这里了
- }
- resolve(result)
- })
- })
-
- return promise
- }
- module.exports ={
- exec}


- const getDetail = (id)=→>{M/获取博客详情
- const sql = "select · from blogs where id '$[id}';1/根据id查询对应的博客内容return exec(sql).then((rows) =>{
- return rows[ o]/l/由于返回的是一个数组,虽然里面只有一个对象,但是我们还是返回对象的好,毕竟model接收的是对象,
- const newBlog =(blogData=o)=> {//新建博客
- const title = blogData.title
- const content = blogData.content
- const author = blogData.author//从博客对象拿到对于的各种数据const createtime = Date.now(
- const sql = insert into blogs (title,content,createtime,author)
- | values ('s(title) ', 's(content) ', '${(createtime} ', '$(author}')1/根据数据定义对应的sqL语句return exec(sql) .then((insertData)=>{
- return
- id: insertData.insertId //执行语句得到一对东西,有用的就这个,我们拿到就行
- if (method === 'GET' 8& req .path === ' /api/blog/detail') {
- const detailData = getDetail(id)
- return new SuccessModel (detailData)*/
- const detailResult = getDetail(id)
- return detai lResult. then( (detailData) => {
- return new SuccessModel (detailData)
- })
- if (method === 'POST' 8&& req.path === ”/api/blog/new ) {
- const data = newBL og(req. body)
- return new SuccessMode (data)*/
- req . body.author = 'nuoduo' //自定&一个假数据
- const result = newBlog(req. body)
- return result . then((data) => d
- return new SuccessModel (data)
- 国)
- if (method === 'POST' && req.path == '/api/blog/update') {
- /* const result = updateBLog(id, req. body)
- if (result) {
- return new successModeL( )
- } else {
- return new ErrorModel('更新博客失败”)
- }*/
- const result = updateBlog(id, req.body) //把要删除的d和postData (即更新的内容)传入
- return result . then( (updateData) =》{
- if (updateData) {
- return new SuccessModel()
- } else {
- return new ErrModel('更新博客失败”)
- }
- })
- }

- const userResult = handleUserRouter(req, res) //管理用户路由
- if (userResult) {
- userResult . then( (userData) => {
- res .end(
- JSON.stringify(userData)
- })
- return