前言

好记性不如烂笔头

开始

  • 新建mpvue-shop-node项目目录

初始化

npm init
  • 项目目录下新建app.js

下载koa

npm install koa

下载koa-router

npm install koa-router
  • 启动项目 
node app.js

注意:本项目使用koa@^2.11.0   koa-router@^8.0.6 请使用指定版本,不然会有意向不到的错误。

app.jsconst Koa = require('koa')
const Router = require('koa-router')const app = new Koa()
const router = new Router()router.get('*', (ctx, next) => {ctx.body = 'hello world'
}) // 任何路由都输出hello worldapp.use(router.routes()) // 启用这个路由app.listen(3000, () => {console.log('server is started at port 3000')
})

备注:启动项目node app.js ,输出server is started at port 3000。在浏览器输入http://localhost:3000/ 页面展示hello world

  • 项目目录下新建routes路由文件夹
新建index.js文件const router = require('koa-router')({prefix: '/lm'
})const controllers = require('../controllers/home/index')router.get('/index/index', controllers)module.exports = router
  • 项目目录下新建controllers操作数据库文件夹
// 新建home文件夹index.jsconst { mysql } = require('../../mysql')module.exports = async ctx => {// 轮播图数据const banner = await mysql('nideshop_ad').where({ad_position_id: 1}).select()ctx.body = {banner: banner}
}

数据库

  • 连接mysql
mysql -u root -p
psd:root

数据库常用命令:https://blog.csdn.net/saafdgvsdg/article/details/80465406

  • 项目目录下新建config.js文件
// 数据库基本配置
const CONF = {port: '5757',mysql: {host: 'localhost', // 地址port: 3306, // 端口号user: 'root', // 用户名db: 'nodemysql', // 数据库名称pass: 'root', // 密码char: 'utf8mb4' // 编号格式}
}module.exports = CONF
  • 项目目录下新建mysql.js文件
// 获取基础配置
const configs = require('./config')var knex = require('knex')({client: 'mysql',connection: {host: configs.mysql.host,port: configs.mysql.port,user: configs.mysql.user,password: configs.mysql.pass,database: configs.mysql.db}
}) // 线程池// 将基础配置和sdk.config 合并 导出初始化完成的sdkmodule.exports = { mysql: knex }

下载knex:http://knexjs.org/

npm install knex

下载mysql

npm install mysql

封装后

  • app.js
const Koa = require('koa')
const config = require('./config')const app = new Koa()const router = require('./routes')app.use(router.routes()) // 启用这个路由app.listen(config.port, () => {console.log(`server is started at port ${config.port}`)
})
  • controllers文件夹下index.js
const _ = require('lodash')
const fs = require('fs')
const path = require('path')//映射 d 文件夹下的文件为模块const mapDir = d => {const tree = {}//获取当前文件夹下的所有文件夹和文件,分为两组,文件夹一组,文件一组const [dirs, files] = _(fs.readdirSync(d)).partition(p => fs.statSync(path.join(d, p)).isDirectory())//映射文件夹dirs.forEach(dir => {tree[dir] = mapDir(path.join(d, dir))})//映射文件files.forEach(file => {//获取文件后缀名字if (path.extname(file) === '.js') {tree[path.basename(file, '.js')] = require(path.join(d, file))}})return tree
}//默认导出当前文件夹下的映射
module.exports = mapDir(path.join(__dirname))
  •  routes文件夹index.js向前端暴露接口
const router = require('koa-router')({prefix: '/lm'
})const controllers = require('../controllers')router.get('/index/index', controllers.home.index)module.exports = router
  • controllers文件夹下新增不同接口模块
// 新建home文件夹index.jsconst { mysql } = require('../../mysql')module.exports = async ctx => {// 轮播图数据const banner = await mysql('nideshop_ad').where({ad_position_id: 1}).select()ctx.body = {banner: banner}
}

数据库常用命令

  • 查询语句
// 从nideshop_goods表中查找五条由category_id、goods_sn、name三个元素组成的数据// mysql语句
SELECT category_id,goods_sn,name FROM nideshop_goods WHERE name='商品' LIMIT 5// node中使用mysqlconst hotGoods = await mysql("nideshop_goods").column("category_id", "name", "goods_sn").where({name: '商品',}).limit(5).select();
  • 插入语句
// 向user表中新增一条id:6、name:王大富、age:29、address:南京市高淳区、性别:女的数据// mysql语句
INSERT INTO user (id,name,age,address,sex) VALUES (6,'王大富',29,'南京市高淳区','女')// node中使用mysqlconst data = await mysql("user").insert({id: 6,name:'王大富',age: 29,address: '南京市高淳区',sex: '女',});
  • 删除语句
// 删除user表中id等于4的数据// mysql语句
DELETE FROM user WHERE id='4'// node中使用mysqlconst banner = await mysql('user').where({id: 4}).delete()
  • 更新语句
// 更新id等于6的数据,将性别更新为男// mysql语句
UPDATE user SET sex='男' WHERE id=6// node中使用语句
const banner = await mysql('user').where({id: 6}).update({sex: '女'})
  • 模糊查询
// 查询name中带有“活动”字眼的数据// mysql语句
SELECT * FROM nideshop_ad WHERE name LIKE '%活动%';// node中使用语句
const banner = await mysql('nideshop_ad').where('name', 'like', '%活动%')
  • 排序
//降序:desc、升序:asc// mysql语句
select * from 'users' order by 'id' desc// node中使用语句
const banner = await mysql('users').orderBy('id', 'desc')
  • 内关联(inner join)
  • 关于内关联、左关联、右关联的概念:https://blog.csdn.net/u014452812/article/details/85318300
// 重点:关联的两个表的数据会被重新合并成一个新的列返回// MySQL中不支持 FULL OUTER JOIN// 内关联,返回两张表中某个字段相等列,查询的是满足条件user_detail中的数据// mysql语句
select * from `user` inner join `user_detail` on `user`.`id` = `user_detail`.`userId`// node中使用语句
const data = await mysql('user').innerJoin('user_detail', 'user.id', 'user_detail.userId')// 左关联,查询到的结果就是表 user 全部数据 和 user_detail 的交集
const data = await mysql('user').leftJoin('user_detail', 'user.id', 'user_detail.userId')// 右关联,询到的结果就是表 user_detail 全部数据和 user 的交集
const data = await mysql('user').rightJoin('user_detail', 'user.id', 'user_detail.userId')

手牵手系列之node+koa2+mpvue全栈(后端)相关推荐

  1. react apollo_Apollo GraphQL:如何使用React和Node Js构建全栈应用

    react apollo Apollo Client is a complete state management library for JavaScript apps. It's a powerf ...

  2. Node.js(MEAN)全栈开发入门-安晓辉-专题视频课程

    Node.js(MEAN)全栈开发入门-28082人已学习 课程介绍         本课程从Node.js切入,以实现一个Web管理系统为目标,以点带面地介绍MEAN技术栈(MongoDB+Expr ...

  3. node.js之全栈开发

    node.js之全栈开发 1.为什么要学习Node.js Node.js是什么 Node能做什么 一些资源 学习到什么 2.Node 2.1起步 安装Node环境 解析执行JavaScript 2.2 ...

  4. Node.js API 全栈 开发框架

    Node.js 框架 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node ...

  5. kubectl查看node状态_全栈之路:使用pm2自动化部署node项目

    相关前三篇 全栈之路:前端工程师如何从 0 开始了解 Docker 全栈之路:vue-cli3 项目从搭建优化到docker部署 全栈之路:从零搭建docker+jenkins+node.js自动化部 ...

  6. 手牵手系列之搭建Vue+Electron项目

    https://blog.csdn.net/weixin_41549915/article/details/110931264 前言 electron:使用 JavaScript,HTML 和 CSS ...

  7. 手牵手系列之TypeScript开发环境搭建

    新建项目 初始化 npm init 安装全局依赖 npm install typescript tslint -g 执行命令初始化,项目根目录生成tsconfig.json文件 tsc --init ...

  8. 手牵手系列之记录JavaScript高级程序设计(第3版)

    背景 <JavaScript高级程序设计>可谓是前端工程师的圣典,全书比较基础讲述js的知识点.最初想要读这本书并做笔记的目的是巩固基础知识点,弥补不足,希望自己能坚持下来,争取每天都能有 ...

  9. vue2+node实现全栈多人视频会议

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 项目前言 一.前期准备 二.开发展示 三.开发过程 1.环境配置 2.源码目录 3.运行 4.部署上线 总结 项目前言 场景 ...

最新文章

  1. 程序员因开发速度太慢而遭公司起诉,索赔金额高达90万!
  2. python有时候没有智能提示_python没有报错提示
  3. c# redis hashid如何设置过期时间_Redis数据库实现原理(划重点)
  4. .net中怎样实现json转化时仅仅处理部分属性二?
  5. elementui 上传七牛_element ui使用上传组件上传文件到七牛(qiniu-js)
  6. axure命令行_Axure变量详解
  7. 文档安全管理系统服务器地址是什么,一种文档安全管理系统登录方法及装置
  8. [luoguP1005] 矩阵取数游戏(DP + 高精度)
  9. 计算机三级嵌入式系统考试之矩阵键盘
  10. 吴恩达神经网络和深度学习-学习笔记-29-卷积的基础知识
  11. 14、数 据 库:破解还原Access数据库密码
  12. c语言编fft算法程序,FFT算法的C语言编程
  13. html跳转页面携带数据
  14. 易中天:望子成人,而非望子成龙
  15. 使用C语言求斐波那契(Fibonacci)数列的第n项
  16. PAT乙级10019题——C语言
  17. 双堆1.数据流的中位数
  18. next主题搭建相册(无需安装插件,代码即可实现)
  19. Git及Github之入门到进阶
  20. 评标专家和评标专家库管理暂行办法:评标专家享有的权利

热门文章

  1. shell入门第6课 环境变量
  2. Tars-K8SFramework离线部署
  3. 实现MySQL同步数据到ES构建宽表
  4. 大数据服务平台架构方案(ppt)
  5. 机器学习系列(5)_特征工程02特征提取
  6. IPv6地址格式简介以及常见的IP地址
  7. xfce4 普通用户登陆不了 -- 解决
  8. 虎课网二级python,计算机二级python真题:第3套基本操作题
  9. 【AI目标检测】VOC格式数据集转换为DOTA类型数据集
  10. 虚拟化服务器环境搭建方案,虚拟化环境建设方案