小言_互联网的博客

[记录十] Vue(全家桶)+node+koa2+mysql+nginx+redis,博客全栈项目之node后台sql语句和exec执行函数

417人阅读  评论(0)

导语:

暑假在家闲着无事,就琢磨着做一个web博客练练手,现在已经做完了,把过程分享出来给大家看看,分享一下学习经验。这是第十篇,开始编写后台接口,为前端接口提供提供基础,主要讲后台sql语句和exec执行函数。

微信搜索 【web小馆】,回复 ”全栈博客项目“,即可获取 项目源码和后续的实战文章教程

一,user.js,用户接口

1,登陆

//登陆
const login = async (username, password) => {
   
    username = escape(username)

    // 生成加密密码
    password = genPassword(password)
    password = escape(password)
    console.log(password)
    const sql = `
        select username, realname, avatar, likes, goods from users where username=${
     username} and passworded=${
     password}
    `
    console.log('sql is', sql)
    const rows = await exec(sql)
    //console.log(rows[0])
    return rows[0] || {
   }
}

2,注册

// 注册
const signup = async (username, password, realname, email) => {
   
  username = escape(username)
  // 生成加密密码
  password = genPassword(password)
  password = escape(password)
  console.log(password)

  let test = `select username from users where username=${
     username}`      //注册时检验有无相同账号
  const testData = await exec(test)
  console.log(testData,testData.length)
  if (testData.length > 0) {
   
    return {
   
      num: testData.length,
      id: 0
    }
  }

  const sql = `
    insert into users (username, realname, passworded, email, likes, goods) values (${
     username}, '${
     realname}', ${
     password}, '${
     email}', '', '');
  `         //注册
  // console.log('sql is', sql)
  const insertData = await exec(sql)
  return {
   
    num: 0,
    id: insertData.insertId
  }
}

3,更换头像

const updataavatar = async (username, avatar_url) => {
   
  const sql = `
    update users set avatar='${
     avatar_url}' where username = '${
     username}';
  `
  const insertData = await exec(sql)
  console.log(insertData)
  return insertData
  
}

4,更换名字

const updataname = async (username, name) => {
   
  const sql = `
    update users set realname='${
     name}' where username = '${
     username}';
  `
  const insertData = await exec(sql)
  console.log(insertData)
  return insertData
  
}

二,密码加密函数

使用密码crypto加密,自己定义一个密匙,然后就能够生产一个新的加密密码,存放入数据库中,就算是数据库内容泄露,黑客也很难去翻译出这些加密密码的明文是多少。

const crypto = require('crypto')

//密匙
const SECRET_KEY = 'xiaomizhou123#'

//加密
function md5(content) {
   
  let md5 = crypto.createHash('md5')
  return md5.update(content).digest('hex')
}

function genPassword(password) {
   
  const str = `password=${
     password}&key=${
     SECRET_KEY}`
  return md5(str)
}

module.exports = {
   
  genPassword
}

三,exec函数

所有的sql语句都要通过这个exec函数调用去执行,才能完成数据库的操作。

const {
    MYSQL_CONF } = require('../conf/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) {
   
                reject(err)
                return
            }
            resolve(result)
        })
    })
    return promise
}

module.exports = {
   
    exec,
    escape: mysql.escape
}

你们的赞就是对我最大的鼓励。谢谢~

微信搜索【web小馆】,回复全栈博客项目,即可获取项目源码和后续的实战文章教程。每天用最简单朴实的语言,潜移默化的提升你的计算机基础知识和前端技术。小米粥,一个专注的web全栈工程师,我们下期再见!



转载:https://blog.csdn.net/gitchatxiaomi/article/details/108308645
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场