NodejsExpressMongoDB项目的搭建02

导读:本篇文章讲解 NodejsExpressMongoDB项目的搭建02,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

连接MongoDB服务器–Model层

1.首先要安装MongoDB和启动服务器

1.安装mongoose包

yarn add mongoose

2.新建一个公共包文件夹utils,以及配置数据库的文件db.js

/*-----------------连接数据库---------------*/
const mongoose = require('mongoose')

// 连接mongoose数据库
mongoose.connect('mongodb://localhost/1912', { useNewUrlParser: true })

const db = mongoose.connection

db.on('error', console.error.bind(console, 'connection error:'))
db.once('open', function () {
    console.log("we're connect!")
})

module.exports = mongoose  // 需要谁就暴露谁

3.Model层model / shop.js关联数据库的collection

const mongoose = require('../utils/db')
// 定义结构
const shopSchema = new mongoose.Schema({  //schema放在全局
  name: String,
  price: Number,
  num: Number
})

// 关联数据库里的shops这个collection
let Shop = mongoose.model('shops', shopSchema)

4.通过find()方法,查询数据库的数据 — model / shop.js

// 查询所有商品
const findShop = () => {
  // 从数据库里拿到list
  return new Promise((resolve, reject) => {  
  // 我们想要在contrioller里拿到这个 find 的结果,但这是一个异步的方法,所以这里要传一个回调函数或者使用Promise      
    Shop.find((err, docs) => {
      if (err) reject(err)
      else resolve(docs)  // docs 和 err 是 find 这个异步方法的结果
    })
  })
}

5.controller层接收model层处理的结果(controller / shop.js),并向前端返回响应

//获取所有的商品列表
const getAllShop = (req, resp) => {
    findShop().then(list => {  // then 里处理成功
        resp.json({
            code: 200,
            body: {
                list
            }
        }).catch(err => {   // catch 里处理失败
            resp.json({
                code: 400,
                body: {
                    err
                }
            })
        })
    })
}

6.MongoDB数据库的schema会自动帮我们创建一个collection,但如果collection里没有数据,就不显示这个collection,可以自己创建一个collection

前端代码

NodejsExpressMongoDB项目的搭建02

index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>xd商品管理系统</title>
  <link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.min.css">
  <link rel="stylesheet" href="./css/index.css">
  <script src="./libs/jquery-3.4.1.min.js"></script>
  <script src="./libs/bootstrap/js/bootstrap.min.js"></script>
  <script src="./libs/utils.js"></script>
</head>
<body>
  <nav class="navbar navbar-inverse">
    <div class="container">
      <!-- Brand and toggle get grouped for better mobile display -->
      <div class="navbar-header">
        <a class="navbar-brand" href="#">XD商品管理系统</a>
      </div>
  
      <!-- Collect the nav links, forms, and other content for toggling -->
      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
        <ul class="nav navbar-nav">
          <li class="active"><a href="#">首页</a></li>
          <li><a href="#">其他页面</a></li>
        </ul>
        <ul class="nav navbar-nav navbar-right">
          <li><a href="#">登录</a></li>
          <li><a href="#">注册</a></li>
        </ul>
        <ul class="nav navbar-nav navbar-right hidden">
          <li><a href="">欢迎您,<b>dary</b></a></li>
          <li><a href="#">注销</a></li>
        </ul>
      </div><!-- /.navbar-collapse -->
    </div><!-- /.container-fluid -->
  </nav>
  <div class="container">
    <button class="btn btn-primary btn-add" data-toggle="modal" data-target="#addModal">添加商品</button>
    <table class="table table-striped table-bordered table-hover table-condensed table-shop">
      <thead>
        <tr>
          <th>编号</th>
          <th>商品名称</th>
          <th>商品价格</th>
          <th>商品数量</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody id="list-tbody">
      </tbody>
    </table>
  </div>
  <!-- Modal -->
  <div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
          <h4 class="modal-title" id="myModalLabel">添加商品</h4>
        </div>
        <div class="modal-body form-horizontal">
          <div class="form-group">
            <label for="inputName" class="col-sm-2 control-label">商品名称</label>
            <div class="col-sm-10">
              <input type="text" class="form-control" id="inputName" placeholder="请输入商品名称">
            </div>
          </div>
          <div class="form-group">
            <label for="inputPrice" class="col-sm-2 control-label">商品价格</label>
            <div class="col-sm-10">
              <input type="number" class="form-control" id="inputPrice" placeholder="请输入商品价格">
            </div>
          </div>
          <div class="form-group">
            <label for="inputNum" class="col-sm-2 control-label">商品数量</label>
            <div class="col-sm-10">
              <input type="number" class="form-control" id="inputNum" placeholder="请输入商品数量">
            </div>
          </div>
          <p id="add-info" class="text-center"></p>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
          <button type="button" class="btn btn-primary" id="btn-add">添加</button>
        </div>
      </div>
    </div>
  </div>
  <script src="./js/select.js"></script>
  <script src="./js/add.js"></script>
  <script src="./js/eidt.js"></script>
</body>
</html>
index.css
.table-shop input {
  display: none;
  width: 80px;
}
.table-shop .btn-ok,
.table-shop .btn-cancel {
  display:none;
}

.edit input,
.edit .btn-ok,
.edit .btn-cancel {
  display: inline-block;
}

.edit span,
.edit .btn-edit,
.edit .btn-del {
  display: none;
}

.btn-add {
  margin-bottom: 30px;
}
select.js
const tbody = document.querySelector('#list-tbody')
getData()
function getData () {
  utils.fetch('./api/shop/list').then(resp => {
    if (resp.code === 200) {
      const { list } = resp.body
  
      let html = list.reduce((str, shop, index) => {
        str += `<tr data-id="${shop._id}">
            <td>${index+1}</td>
            <td><span>${shop.name}</span><input class="shop-name" type="text"></td>
            <td><span>${shop.price}</span><input class="shop-price" type="text"></td>
            <td><span>${shop.num}</span><input class="shop-num" type="text"></td>
            <td>
              <button class="btn btn-xs btn-edit btn-info">编辑</button>
              <button class="btn btn-xs btn-del btn-danger">删除</button>
              <button class="btn btn-xs btn-ok btn-success">确定</button>
              <button class="btn btn-xs btn-cancel btn-warning">取消</button>
            </td>
          </tr>`
        return str
      }, '')
  
      tbody.innerHTML = html
    } else {
      alert('网络失败,请重试')
    }
  })
}
Express代码
app.js
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var apiRouter = require('./routes/api');

var app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/api', apiRouter);

module.exports = app;

api.js
// const express = require("express")
// const router = express.Router()
const router = require('express').Router();

// 获取getAllShop的对象
const { getAllShop} = require('../controller/shop')
router.get('/shop/list', getAllShop);

module.exports = router;
controller/shop.js
const { findShop } = require('../model/shop')

//获取所有的商品列表
const getAllShop = (req, resp) => {
    findShop().then(list => {  // then 里处理成功
        resp.json({
            code: 200,
            body: {
                list
            }
        }).catch(err => {   // catch 里处理失败
            resp.json({
                code: 400,
                body: {
                    err
                }
            })
        })
    })
}


//把他暴露出去
module.exports = {
    getAllShop
}

model/shop.js

const mongoose = require('../utils/db')

// 定义结构
const shopSchema = new mongoose.Schema({
  name: String,
  price: Number,
  num: Number
})

// 关联数据库里的shops
let Shop = mongoose.model('shops', shopSchema)


// 查询所有商品
const findShop = () => {
  // 从数据库里拿到list
  return new Promise((resolve, reject) => {
    Shop.find((err, docs) => {
      if (err) reject(err)
      else resolve(docs)
    })
  })
}

module.exports = {
  findShop
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/4567.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!