Nodejs

Section-6 第一批用户入库

2019-07-19  本文已影响0人  羽晞yose

Lesson-1 NoSQL 简介

什么是 NoSQL

NoSQL 数据库的分类

为什么要用 NoSQL


Lesson-2 MongoDB 简介

什么是 MongoDB

为什么要用 MongoDB

MongoDB 下载

云 MongoDB


Lesson-3 云数据库 -- MongoDB Atlas

操作步骤

而我实际是在电脑上安装的MongoDB,有点小曲折,网上文章也不是很实时,这里记录一下安装流程
下载MongoDB我尝试了各种方法都下不下来,老是下载报错,所以是直接网上下的3.4版本
安装的时候选择自定义文件夹,否则会默认安装到C盘上,反正个人不愿意


选择Custom自定义安装路径

一路Next即可,直到安装结束,我还在该文件夹下建立了一个 data\db 文件夹


安装完成后的文件夹目录

因为启动mongodb服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功


data\db
到这一步安装及创建目录工作完成,接下来是设置环境变量,我用的win8,直接搜高级系统设置
win8搜索
高级系统配置

点击环境变量


系统属性
双击path
系统属性

把刚才安装的文件夹目录复制到这里,千万不要跟其他文章说的一样加;号,如果要跟其他文章一样的界面需要点击编辑文本,一路确定回去,这样就可以在电脑的任何地方执行cmd命令都不会报mongod不是内部或外部命令了


添加环境变量

启动cmd,执行mongod --dbpath E:\data\db,后面的路径就是我前面创建的 data\db 文件夹路径。为了后续能直接使用mongod.exe直接启动,这里需要将db放在E盘根目录下,而且必须为data/db。
访问http://localhost:27017/

安装及启动成功

安装Robo 3T 实现数据库可视化,这个太简单就不写步骤了


Lesson-4 使用 Mongoose 连接 MongoDB

操作步骤

安装 Mongoose

执行 npm i mongoose -S 进行安装,需要先看一下 mongoose 官网 文档

Mongoose 链接 MongoDB

为了方便管理,这里在index.js文件目录下新建一个config.js目录,用于后续所有需要配置的东西

// config.js password 填密码,不要留 <> 号
module.exports = {
    connectionStr: 在线 mongoDB 拿到的连接地址,
    connectionLocal: 'mongodb://localhost:27017/database' // 连接本地mongoDB
}

连接远程 mongoDB,并监听错误

const mongoose = require('mongoose');
const { connectionStr, connectionLocal } = require('./config.js');

// 连接 mongoDB
// mongoose.connect(connectionStr, { useNewUrlParser: true } , () => console.log('MongoDB 连接成功'));
mongoose.connect(connectionLocal, { useNewUrlParser: true } , () => console.log('MongoDB 连接成功'));
// 打印错误信息
mongoose.connection.on('error', console.error);

接下来,我使用的都是本地MongoDB,因为单纯的不想连接远程,不好查看数据。我会使用本地 MongoDB + Robo 3T,上面我已经把本地跟远程的全都列出来了,任君挑选


Lesson-5 设计用户模块的 Schema

操作步骤

我们在 app 文件夹下创建一个 models 文件夹,该文件夹用于定义用户模块的数据结构(Schema)及模型(Model)
Schema:相当于一个数据库的模板。Mongoose 中的所有内容都以 Schema 开头。每个模式都映射到 MongoDB 集合,并定义该集合中文档的数据结构(模板/模式)。
Model:基本文档数据的父类,通过集成 Schema 定义的基本方法和属性得到相关的内容。要使用我们的模式定义,需要将 Schema 转换为可以使用的模型。为此,我们将其传递给mongoose.model(modelName, schema)

|- models
  |- user.js
// models/user.js
const mongoose = require('mongoose');

const { Schema, model } = mongoose;

const userSchema = new Schema({
    name: { type: String, required: true },
    age: { type: Number, default: 0 }
});

// user代表集合,导出的是一个类
module.exports = model('user', userSchema);
说不清,直接上图

Lesson-6 用 MongoDB 实现用户的增删改查

操作步骤

用 Mongoose 实现增删改查接口

前面已经在 models/users.js 中设置好了数据模型,并获取对应集合的数据导出,那么接下来只需要在控制器里使用即可。如果到这里不管文档啊,文章啊还是没法理解Schema,那就把它当做是一个格式校验吧,拿 VUE 的 props 去当参照吧,没在模型中的请求体一律被过滤没了,其实要说我真的理解它,我也还是不知道怎么理解这个词才是绝对正确的

// controller.js/users.js
const User = require('../models/users');

class UsersCtl {
    async find (ctx) {
        ctx.body = await User.find();
    }

    async findById (ctx) {
        const user = await User.findById(ctx.params.id);
        if(!user) ctx.throw(404, '用户不存在');
        ctx.body = user;
    }

    async create (ctx) {
        ctx.verifyParams({
            name: { type: 'string', required: true }
        });
        
        // save方法,保存到数据库。并根据 RESTful API最佳实践,返回增加的内容
        const user = await new User(ctx.request.body).save();
        ctx.body = user;
    }

    async update (ctx) {
        ctx.verifyParams({
            name: {
                type: 'string',
                required: true
            }
        });

        // findByIdAndUpdate,第一个参数为要修改的数据id,第二个参数为修改的内容
        const user = await User.findByIdAndUpdate(ctx.params.id, ctx.request.body);
        if(!user) ctx.throw(404, '用户不存在');
        ctx.body = user;
    }

    async delete (ctx) {
        const user = await User.findByIdAndRemove(ctx.params.id);
        if(!user) ctx.throw(404, '用户不存在');
        ctx.status = 204; // 没有内容,但是成功了
    }
}

module.exports = new UsersCtl();

这里我就不放所有验证截图的,自行操作一下即可。有一点需要说明的,看下面的截图,返回的是原数据,如果想返回的是修改后的数据,那么该方法实际有第三个参数 options,第四个参数 callBack(回调函数,这里就不写了),具体可以查看文档 mongoosejs 文档

options 可选参数:
new: Boolean- 默认为false。返回修改后的数据。
upsert: Boolean- 默认为false。如果不存在则创建记录。
runValidators: 如果值为true,执行Validation验证。
setDefaultsOnInsert: 如果upsert选项为true,在新建时插入文档定义的默认值。
sort: 如果有多个查询条件,按顺序进行查询更新。
select: 设置数据的返回。

官方文档截图 修改特定用户
上一篇下一篇

猜你喜欢

热点阅读