前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >四、mongoose的使用

四、mongoose的使用

作者头像
Dreamy.TZK
发布2020-07-09 15:50:03
1.8K0
发布2020-07-09 15:50:03
举报
文章被收录于专栏:小康的自留地小康的自留地

mongoose

核心概念

  • schema 约束字段/列数据
  • model模型 对应 集合 后期用它来实现数据增删改查

简介

  1. 安装 npm i mongoose
  2. schema 英文网: http://mongoosejs.com 中文网: http://mongoosejs.net/ 作用:用来约束MongoDB文档数据(哪些字段必须,哪些字段可选的)
  3. model 一个模型对应一个集合。后面通过模型管理集合中的数据。

使用

基本模型

代码语言:javascript
复制
// 一、导入模块
const mongoose = require("mongoose");
// 二、连接数据库
const db = mongoose.createConnection(
  "mongodb://shop2:shop2@localhost:27017/shop",
  { useNewUrlParser: true, useUnifiedTopology: true },
  (err) => {
    if (err) {
      console.log("---------------------------------------");
      console.log("数据库连接失败:", err);
      console.log("---------------------------------------");
      return;
    }
    console.log("数据库连接成功");
  }
);

// 三、设置数据模型(声明是哪个集合,限制字段个数和字段类型)
const model = db.model("api", {
  uname: { type: String, default: "神龙教主" },
  pwd: String,
  age: { type: Number },
  sex: { type: String },
});

1.插入一条数据

代码语言:javascript
复制
const insertObj = new model({
    uname: "张三",
    pwd: "123",
    age: 18,
    sex: "man",
});

insertObj
    .save()
    .then((res) => {
    return res;
})
    .catch((err) => {
    console.log("插入失败" + err);
    return false;
});

2.查询数据

代码语言:javascript
复制
model
    .find({ uname: "张三" })
    .then((res) => {
    console.log(res);

    return res;
})
    .catch((err) => {
    console.log(err);
    return false;
});

3.分页查询

代码语言:javascript
复制
model
    .find({ uname: "张三" })
    .skip(1)
    .limit(1)
    .then((res) => {
    console.log(res);

    return res;
})
    .catch((err) => {
    console.log(err);
    return false;
});

教学管理系统接口开发

基本框架(express)

代码语言:javascript
复制
const express = require("express");
const app = express();
const port = 3000;

app.get("/", (req, res) => res.send("Hello World!"));
app.listen(port, () =>
  console.log(`Server running at  http://127.0.0.1:${port}`)
);

学生添加接口

1.导入body-parser模块接收前端传来的数据

2.定义路由 分模块开发,将路由的方法写在/constroller/stu.js文件中。

代码语言:javascript
复制
const stuController = require(process.cwd() + "/constroller/stu");
app.post("/stu", stuController.create);

/constroller/stu.js文件中,导入模型,调用模型中的方法完成逻辑的编写,最后导出。

代码语言:javascript
复制
// 导入模型
const { createModle } = require(process.cwd() + "/models/stu");
const create = async (req, res) => {
    //   res.send("this is stu create");
    let postData = req.body;
    let rs = await createModle(postData);
    if (rs) {
        res.send({
            meta: {
                state: 200,
                msg: "添加成功",
            },
            data: null,
        });
    } else {
        res.send({
            meta: {
                state: 500,
                msg: "添加失败",
            },
            data: null,
        });
    }
};

// 导出成员
module.exports = { create };

/models/stu.js模型文件中,定义与数据库相关的操作。

代码语言:javascript
复制
// 一、导入模块
const mongoose = require("mongoose");
// 二、连接数据库
const db = mongoose.createConnection(
  "mongodb://shop2:shop2@localhost:27017/shop",
  { useNewUrlParser: true, useUnifiedTopology: true },
  (err) => {
    if (err) {
      console.log("---------------------------------------");
      console.log("数据库连接失败:", err);
      console.log("---------------------------------------");
      return;
    }
    console.log("数据库连接成功");
  }
);

// 三、设置数据模型(声明是哪个集合,限制字段个数和字段类型)
const model = db.model("stu", {
  uname: { type: String, default: "神龙教主" },
  pwd: String,
  age: { type: Number },
  sex: { type: String },
});

const createModle = (postData) => {
  insertObj = new model(postData);
  return insertObj
    .save()
    .then((res) => {
      return res;
    })
    .catch((err) => {
      console.log(err);
      return false;
    });
};

// 四、方法

module.exports = { createModle };

学生列表接口

1.定义路由/stu get请求

代码语言:javascript
复制
app.get("/stu", stuController.create);

2.为控制器新增方法

代码语言:javascript
复制
const index = (req, res) => {
    listModle().then((rs) => {
        if (rs) {
            res.send({
                meta: {
                    state: 200,
                    msg: "查询成功",
                },
                data: rs,
            });
        } else {
            res.send({
                meta: {
                    state: 500,
                    msg: "查询失败",
                },
                data: null,
            });
        }
    });
};

3.修改stu模型,增加查询方法

代码语言:javascript
复制
const listModle = () => {
  return model
    .find()
    .then((res) => {
      console.log(res);
      return res;
    })
    .catch((err) => {
      console.log(err);
      return null;
    });
};

学生列表接口分页

1.添加路由

代码语言:javascript
复制
app.get("/stu", stuController.index);

2.修改控制器

代码语言:javascript
复制
const index = (req, res) => {
  let getData = req.query;
  let pagesize = parseInt(getData.pagesize);
  let skip = (parseInt(getData.pageno) - 1) * pagesize;
  listModle(skip, pagesize).then((rs) => {
    if (rs) {
      res.send({
        meta: {
          state: 200,
          msg: "查询成功",
        },
        data: rs,
      });
    } else {
      res.send({
        meta: {
          state: 500,
          msg: "查询失败",
        },
        data: null,
      });
    }
  });
};

3.修改模型

代码语言:javascript
复制
const listModle = (skip, limit) => {
  return model
    .find()
    .skip(skip)
    .limit(limit)
    .then((res) => {
      console.log(res);
      return res;
    })
    .catch((err) => {
      console.log(err);
      return null;
    });
};

apiDoc的使用

1.安装模块(仅一次)

代码语言:javascript
复制
npm install apidoc -g

2.在项目根目录创建apidoc.json文件(仅一次)

代码语言:javascript
复制
{
"name": "example",
"version": "0.1.0",
"description": "apiDoc basic example",
"title": "Custom apiDoc browser title",
"url" : "https://api.github.com/v1"
}

3.写接口注释(N次)

代码语言:javascript
复制
/**
 * @api {get} /user/:id Request User information
 * @apiName GetUser
 * @apiGroup User
 *
 * @apiParam {Number} id Users unique ID.
 *
 * @apiSuccess {String} firstname Firstname of the User.
 * @apiSuccess {String} lastname  Lastname of the User.
 */

例如:

代码语言:javascript
复制
/**
 * @api {get} /stu 学生模块列表
 * @apiName Add
 * @apiGroup Stu
 *
 * @apiParam {Number} pageno   当前页
 * @apiParam {Number} pagesize 每页显示条数
 *
 * @apiSuccess {String}  meta  状态码&提示信息
 * @apiSuccess {String}  data  数据
 */

4.生成接口文档(N次)

代码语言:javascript
复制
apidoc -i ./接口注释目录 -o ./接口文档存放目录
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mongoose
    • 简介
      • 使用
      • 教学管理系统接口开发
        • 基本框架(express)
          • 学生添加接口
            • 学生列表接口
              • 学生列表接口分页
              • apiDoc的使用
              相关产品与服务
              云数据库 MongoDB
              腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档