koa脚手架

cmd安装依赖
  1. npm i koa-generator -g

创建项目 在vue项目下面打开Powershell窗口创建

  1. koa2 server

启动server项目 用vcode打开 然后输入

  1. npm i
  2. npm run dev

浏览器输入localhost:3000

第四章 node.js操作数据库 - 图1
第四章 node.js操作数据库 - 图2

二 导入json数据

1.根目录建resource文件夹,将json数据放入resource
2.数据库导入json文件

第四章 node.js操作数据库 - 图3

操作数据库

安装

  1. yarn add mongoose

在根目录下面新建models文件夹 有db.js goods.js
models/db.js

  1. const mongoose=require('mongoose')
  2. mongoose.connect( 'mongodb://127.0.0.1:27017/shop', {useNewUrlParser: true},(err)=>{
  3. if(err){throw err};
  4. console.log("数据库连接成功")
  5. });
  6. module.exports=mongoose;

models/goods

  1. const mongoose = require('./db')
  2. var GoodsSchema =new mongoose.Schema({
  3. productId:String,
  4. productName:String,
  5. salePrice:Number,
  6. productImage:String,
  7. productUrl:String
  8. })
  9. var Goods= mongoose.model('Admin',GoodsSchema,'goods')
  10. module.exports=Goods;

routes/index.js

  1. const router = require('koa-router')()
  2. const GoodsModel=require('../models/goods')
  3. router.get('/', async (ctx) => {
  4. var data=await GoodsModel.find({});
  5. ctx.body=data
  6. })
  7. module.exports = router

给前端返回的数据格式

  1. {
  2. //200请求成功 1001没有请求成功
  3. code:200,
  4. msg:"请求成功",
  5. result:data,
  6. total:17
  7. //从数据库中请求的数据装到result中
  8. }
  9. router.get('/', async (ctx) => {
  10. var data=await GoodsModel.find({});
  11. ctx.body={
  12. code:200,
  13. msg:"首页数据请求成功",
  14. result:data,
  15. total:data.length
  16. }
  17. })

第四章 node.js操作数据库 - 图4

  1. const UsersModel=require('../models/users')
  2. //主路由,子路由方式
  3. router.prefix('/users')
  4. //主路由
  5. router.get('/', async (ctx) =>{
  6. var data=await UsersModel.find({})
  7. ctx.body={
  8. code:200,
  9. msg:"数据请求成功",
  10. result:data,
  11. }
  12. })
  13. //子路由
  14. router.get('/bar', function (ctx, next) {
  15. ctx.body = 'this is a users/bar response'
  16. })

跨域

  1. yarn add koa2-cors
  1. const cors=require('koa2-cors')
  2. //配置允许跨域的域名
  3. app.use(cors({
  4. /* 只允许本地地址访问 */
  5. origin:"http://192.168.14.27:8080"
  6. /* * origin:"*" 允许所有地址访问 */
  7. }))

axios-get

根据价格大小进行查询

  1. data(){
  2. return{
  3. searchPrice:[
  4. {gt:0,lt:100,id:1001},
  5. {gt:100,lt:500,id:1002},
  6. {gt:500,lt:1000,id:1003},
  7. {gt:1000,lt:5000,id:1004}
  8. ],
  9. goodsList:[]
  10. }
  11. },
  12. mounted(){
  13. this.$http('goods/list').then(res=>{
  14. this.goodsList=res.data.result
  15. })
  16. },

params将数据传递给后端

  1. this.$http({
  2. url:'/goods/price',
  3. methods:'get',
  4. params:{
  5. gt,lt
  6. }
  7. }).then(res=>{
  8. console.log(res)
  9. })

后台query接收get传值

  1. router.get("/goods/price",async ctx=>{
  2. /* 传递给后台的值,用ctx.query接收get传值,即是问号后面的值 */
  3. var {gt,lt}=ctx.query;
  4. })

对数据库进行查询

  1. var data=await GoodsModel.find({salePrice:{$gt:gt,$lt:lt}})

对有数据和没数据的处理
后台

  1. /* 根据价格大小查询 */
  2. router.get("/goods/price", async ctx => {
  3. var { gt, lt } = ctx.query;
  4. var data = await GoodsModel.find({ salePrice: { $gt: gt, $lt: lt } })
  5. if (data.length) {
  6. ctx.body = {
  7. code: 200,
  8. msg: "数据请求成功",
  9. result: data,
  10. total: data.length
  11. }
  12. }else{
  13. ctx.body = {
  14. code:1001,
  15. msg:"没有数据"
  16. }
  17. }
  18. })

前台处理

  1. methods: {
  2. handlePrice(gt, lt) {
  3. console.log(gt, lt);
  4. this.$http({
  5. url: "/goods/price",
  6. method: "get",
  7. params: {
  8. gt,
  9. lt
  10. }
  11. }).then(res => {
  12. if (res.data.code == 200) {
  13. this.goodsList = res.data.result;
  14. }else{
  15. this.goodsList = [];
  16. this.$message({
  17. duration:1000,
  18. message:res.data.msg,
  19. type: 'warning'
  20. //这是element-ui 弹窗message
  21. })
  22. }
  23. });
  24. }
  25. }