前端进阶全栈入门级教程nodeJs博客开发(二)安装mysql完善api接口对接mysql

Posted MmM豆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端进阶全栈入门级教程nodeJs博客开发(二)安装mysql完善api接口对接mysql相关的知识,希望对你有一定的参考价值。

没有数据库的情况已经模拟走通,下面来连接数据库,我们使用mysql,去官网下载然后安装即可

下载地址

这里以免安装为例

一定要以管理员身份运行

不然就会出现以下错误

cd 到安装路径下的bin目录(以Win10系统以管理 员身份运行Cmd命令行 输入cd后回车无反应,这个时候只要再输入盘符即可)

或者输入 cd /d D:\\mysql-8.0.23-winx64\\bin

执行 mysqld --install 安装mysql服务,然后出现一下提示表示成功

然后初始化mysql, mysqld --initialize --console

初始化会产生随机密码 记住他,

开启mysql服务 net start mysql

登录mysql mysql -u root -p

修改密码

alter user ‘root’@‘localhost’ identified by ‘新密码’;

配置流程(https://www.cnblogs.com/winton-nfs/p/11524007.html

关于数据库的的可视化工具,我这里选择navicat https://www.jb51.net/database/710931.html

用navicat 或者 node连接mysql报错 client does not support authentication protocol requested by server;

解决方案

关于启动以后的启动也需要使用管理员窗口

(一)navicat连接数据库创建blogs,和users表

  1. 点击连接选择mysql,输入连接名字,然后确认一下用户名输入密码

点击一下测试连接

然后确定创建后,左边就会出现,双击打开连接后会变绿色,然后继续悬停上面右键选择新建数据库,字符集选择utf8

成功后,双击打开,然后鼠标悬停在表上,右键新建表

blogs表 id勾选上自增

保存后再次双击左边的blogs表 插入假数据

users表

tips 操作后记得保存 ctrl+s

(二)nodejs 连接mysql

安装mysql 包

npm i mysql -D

src 新建config和db文件夹

├─src
|  ├─db
|  | └mysql.js
|  ├─config
|  |   └db.js

config 用于管理 库的配置

db.js

const env = process.env.NODE_ENV  // 环境参数

// 配置
let MYSQL_CONF
// 本地
if (env === 'dev') 
    // mysql
    MYSQL_CONF = 
        host: 'localhost',
        user: 'root',
        password: '',
        port: '3306',
        database: 'myblog'
    

// 线上
if (env === 'production') 
    // mysql线上的配置,这里先写一样的
    MYSQL_CONF = 
        host: 'localhost',
        user: 'root',
        password: '',
        port: '3306',
        database: 'myblog'
    

  


module.exports = 
    MYSQL_CONF,

db文件夹包含数据库连接的操作

mysql.js

const mysql = require('mysql')
const MYSQL_CONF = require('../config/db')

// 创建连接对象
const con = mysql.createConnection(MYSQL_CONF)

// 开始连接
con.connect()

// 执行sql的函数
function exec(sql)
  const  promise = new Promise( (resolve, reject) => 
    con.query(sql, (err, result) => 
      if(err)
         console.error(err);
         return
      
      resolve(result)
    )
  )
    return promise


module.exports = 
  exec


(三)完善API接口对接mysql

controller文件下

blog.js

const  exec  = require('../db/mysql')
const getList = (author,keyword) =>
    //1=1 默认条件防止报错
  let sql = `select * from blogs where 1=1 `
    if (author) 
        sql += `and author='$author' `
    
    if (keyword) 
        sql += `and title like '%$keyword%' `
    
    sql += `order by createtime desc;`

    // 返回 promise
    return exec(sql)

const getDetail = (id) =>
  const sql = `select * from blogs where id='$id'`
  return exec(sql).then(rows => 
      return rows[0]
  )

const newBlog = (blogData = ) =>
  // blogData 包含 title content
  // 添加成功返回添加id,
  const title,content,author = blogData
  const createTime = Date.now()

  const sql = `
      insert into blogs (title, content, createtime, author)
      values ('$title', '$content', $createTime, '$author');
  `

  return exec(sql).then(insertData => 
      // console.log('insertData is ', insertData)
      return 
          id: insertData.insertId
      
  )



const updateBlog = (id,blogData = ) =>
 // id 就是要更新博客的 id
    // blogData 是一个博客对象,包含 title content 属性
  
    const title = blogData.title
    const content =blogData.content

    const sql = `
        update blogs set title='$title', content='$content' where id=$id
    `

    return exec(sql).then(updateData => 
        // console.log('updateData is ', updateData)
        if (updateData.affectedRows > 0) 
            return true
        
        return false
    )

const delBlog = (id,author) =>
  // id 删除博客的id
  const sql = `delete from blogs where id='$id' and author='$author';`
  return exec(sql).then(delData => 
      // console.log('delData is ', delData)
      if (delData.affectedRows > 0) 
          return true
      
      return false
  )


module.exports = 
  getList,
  getDetail,
  updateBlog,
  newBlog,
  delBlog

user.js

const exec = require('../db/mysql')
const login = (username, password) =>
  const sql = `select username, realname from users where username='$username' and password=$password`
  return exec(sql).then(row => 
    console.log('row is',row);
    
    return row[0]? true :false
)
 

 module.exports = 
   login
 

以上是关于前端进阶全栈入门级教程nodeJs博客开发(二)安装mysql完善api接口对接mysql的主要内容,如果未能解决你的问题,请参考以下文章

前端进阶全栈入门级教程nodeJs博客开发(二)安装mysql完善api接口对接mysql

前端进阶全栈入门级教程nodeJs博客开发(二)安装mysql完善api接口对接mysql

前端进阶全栈入门级教程nodeJs博客开发(二)安装mysql完善api接口对接mysql

前端进阶全栈入门级教程nodeJs博客开发(一)搭建环境与路由

前端进阶全栈入门级教程nodeJs博客开发(一)搭建环境与路由

前端进阶全栈入门级教程nodeJs博客开发(一)搭建环境与路由