资讯专栏INFORMATION COLUMN

Node.js学习之路23——Node.js利用mongoose连接mongodb数据库

jsummer / 1799人阅读

摘要:类比一下你有一个巨型停车场,里边分了不同的停车区集合,这里的,每个停车区可以停很多车下文提到的,相当于每个数据集合里边可以有很多张数据表。

Node.js利用mongoose连接mongodb数据库
Node.js连接mongodb数据库有很多种方法,通过mongoose模块引入是其中的一个方法

代码组织结构

|---|根目录
|---|---|connect.js(mongoose测试连接)
|---|---|user.js(定义user数据表)
|---|---|operate.js(定义mongodb的增删改查功能)
|---|---|login.js(Node后台调用operate.js文件的方法处理数据)
1. 引入mongoose测试连接
当前使用的mongoose版本为4.13.7

该文件为connect.js

1.1 代码部分
const mongoose = require("mongoose");
const DB_URL = "mongodb://127.0.0.1:27017/infos";
mongoose.Promise = global.Promise;
mongoose.connect(DB_URL, { useMongoClient: true });
mongoose.connection.on("connected", () => {
    console.log("mongodb数据库连接成功")
});
mongoose.connection.on("error", (error) => {
    console.log("mongodb数据库连接失败", error)
});
module.exports = mongoose;
1.2 代码分析 1.2.1 引入mongoose模块

const mongoose = require("mongoose");

1.2.2 获取mongodb的本机地址

const DB_URL = "mongodb://127.0.0.1:27017/infos";

127.0.0.1是本地IP地址

27017mongodb的服务启动端口

infosmongodb的一个数据集合名字

mongodb可以有很多数据集合,每个集合中可以有很多数据表。

类比一下:你有一个巨型停车场(mongodb),里边分了不同的停车区(集合,这里的infos),每个停车区可以停很多车((下文提到的user),相当于每个数据集合里边可以有很多张数据表)。

如果需要给mongodb加上用户及密码,可以这样

const DB_URL = "mongodb://username:password@127.0.0.1:27017/infos";

其中username为用户名,中间英文:password为密码,其余不变

1.2.3 连接数据库成功

mongoose.connection.on("connected", callback())

数据库连接成功后,会在控制台输出mongodb数据库连接成功

1.2.4 连接数据库失败

mongoose.connection.on("error", callback())

数据库连接成功后,会在控制台输出mongodb数据库连接失败和错误信息

1.2.5 导出mongoose模块

module.exports = mongoose;

2. 定义每张数据表的字段

该文件为user.js

2.1 代码介绍
const mongoose = require("mongoose");
const db = require("./connect.js");
const userSchema = new mongoose.Schema({
    number: { type: Number},
    email: { type: String },
    password: { type: String },
    rePassword: { type: String },
    mobile: { type: String },
    question: { type: String },
    answer: { type: String },
});
let userModel = db.model("user", userSchema);
module.exports = userModel;
2.2 代码分析 2.2.1 引入mongoose模块

const mongoose = require("mongoose");

2.2.1 引入连接mongodb数据库的模块

const db = require("./connect.js");

2.2.2 定义Schema

const userSchema = new mongoose.Schema({})

通过mongoose对象的Schema属性创建一个Schema对象

Schema原意为架构
mongodb中,每一个数据字段都要有固定的数据类型,所以Schemamongoose中的意思为,每一张数据表对应的字段的数据类型

Schema所能够拥有的数据类型有以下几个

String

Number

Date

Buffer

Boolean

Mixed

ObjectId

Array

字段介绍,以number字段为例

type是该字段的数据类型

default是该字段的默认值

还有很多其他的属性,以及可以自定义属性

2.2.3 确认数据表和该数据表的字段

let userModel = db.model("user", userSchema);

定义一个数据表userModel

使用db.model方法,第一个参数是数据表的名字,第二个参数是该数据表使用的Schema

2.2.4 最终导出定义的数据表

module.exports = userModel;

导出之后,在operate.js中使用这个对象的mongodb的增删改查方法

3. 定义mongodb的增删改查功能 3.1 代码部分

该文件为operate.js

let userModel = require("./user.js");
module.exports = {
    save(data) {
        return new Promise((resolve, reject) => {
            userModel.create(data, (err, docs) => {
                if (err) {
                    rejct(err);
                } else {
                    resolve(docs);
                }
            })
        })
    },
    find(data = {}, fields = null, options = {}) {
        return new Promise((resolve, reject) => {
            //model.find(需要查找的对象(如果为空,则查找到所有数据), 属性过滤对象[可选参数], options[可选参数], callback)
            userModel.find(data, fields, options, (error, doc) => {
                if (error) {
                    reject(error)
                } else {
                    resolve(doc)
                }
            })
        })
    },
    findOne(data) {
        return new Promise((resolve, reject) => {
            //model.findOne(需要查找的对象,callback)
            userModel.findOne(data, (error, doc) => {
                if (error) {
                    reject(error)
                } else {
                    resolve(doc)
                }
            })
        })
    },
    findById(data) {
        return new Promise((resolve, reject) => {
            //model.findById(需要查找的id对象 ,callback)
            userModel.findById(data, (error, doc) => {
                if (error) {
                    reject(error)
                } else {
                    resolve(doc)
                }
            })
        })
    },
    update(conditions, update) {
        return new Promise((resolve, reject) => {
            //model.update(查询条件,更新对象,callback)
            userModel.update(conditions, update, (error, doc) => {
                if (error) {
                    reject(error)
                } else {
                    resolve(doc)
                }
            })
        })
    },
    remove(conditions) {
        return new Promise((resolve, reject) => {
            //model.update(查询条件,callback)
            userModel.remove(conditions, (error, doc) => {
                if (error) {
                    reject(error)
                } else {
                    resolve(doc)
                }
            })
        })
    }
};
3.2 代码分析

引入user模块

let userModel = require("../models/users");

引入该文件的目的是,让userModel这个数据表直接的调用mongodb的各种方法

4. 后台直接使用operate处理数据

该文件为login.js

4.1 代码部分
const express = require("express");
const router = express.Router();
let operate = require("./operate");
router.post("/", function (req, res, next) {
    let param = {};
    param.email = req.body.email;
    param.password = req.body.password;
    console.log(param);
    operate.save(param).then(result => {
        if (result) {
            res.json({
                data: result,
                success: true
            })
        } else {
            res.json({
                data: result,
                success: false
            })
        }
    });
});
module.exports = router;
4.2 代码分析

需要熟练使用Expressrouter方法

引入Express,定义一个post方法

post方法传递的对象数据挂在在req.body

直接调用operate.save()方法,传递param对象参数

获取到返回结果result,对获取到的结果进行进一步处理

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93060.html

相关文章

  • Node.js学习之路23——Node.js利用mongoose连接mongodb据库

    摘要:类比一下你有一个巨型停车场,里边分了不同的停车区集合,这里的,每个停车区可以停很多车下文提到的,相当于每个数据集合里边可以有很多张数据表。 Node.js利用mongoose连接mongodb数据库 Node.js连接mongodb数据库有很多种方法,通过mongoose模块引入是其中的一个方法 代码组织结构 |---|根目录 |---|---|connect.js(mongoose测...

    ssshooter 评论0 收藏0
  • Node +MongoDB 搭建后台的全过程

    摘要:搭建后台的全过程近期基于搭建前端项目,搭建后台,遇到了不少问题,总结博客如下,有什么不正确的地方,请大家批评指正是非关系型数据库。是用来启动的,是的命令行客户端。 Node + mongoDB 搭建后台的全过程 近期基于 vue-cil 搭建前端项目, express + mongoose 搭建后台,遇到了不少问题,总结博客如下,有什么不正确的地方,请大家批评指正^ _ ^! mong...

    voidking 评论0 收藏0
  • 【实战】用 express+MongoDB 搭建一个完整的前端项目

    摘要:前言要做一个全沾的工程师,对于后端和数据库来说,即使不认识也要见个面的。基本了解的概念就好,主要是安装上数据库,并进行简单的增删操作。 前言:要做一个全沾的工程师,对于后端和数据库来说,即使不认识也要见个面的。本文给的例子很简单,也贴出来源码,只要一步步下来,就可以跑起来啦~~~ 思考一个需求:做一个登录页面,自己搭建服务和数据库,将用户输入的登录信息保存到数据库如何完成呢:首先选择...

    Steve_Wang_ 评论0 收藏0
  • 基于 Vue2+Node+mongoDB 的前后端分离全栈练手小项目

    摘要:本文源码简介之前刚入门并做好了一个简而全的纯全家桶的项目,数据都是本地模拟请求的详情请移步这里为了真正做到数据库的真实存取,于是又开始入门了并以此来为之前的页面写后台数据接口。 本文源码:Github 简介: 之前刚入门vue并做好了一个简而全的纯vue2全家桶的项目,数据都是本地 json 模拟请求的;详情请移步这里:vue-proj-demo 为了真正做到数据库的真实存取,于是又...

    jay_tian 评论0 收藏0
  • Node学习记录: mongodb

    摘要:的逻辑结构是一种层次结构,主要由文档集合数据库这三部分组成的。文档由键值对构成,像等,它是核心单元,的文档,相当于关系数据库中的一行记录。我们以此为例看它如何使用真实项目中参考学习笔记之的使用入门教程的一些操作命令 showImg(https://segmentfault.com/img/bVN45N?w=1192&h=578); 简介 在说MongoDB数据插入操作之前,我们先来简单...

    zzzmh 评论0 收藏0

发表评论

0条评论

jsummer

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<