问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Node.js连接MongoDB数据库(Mongoose)

创作时间:
作者:
@小白创作中心

Node.js连接MongoDB数据库(Mongoose)

引用
1
来源
1.
https://www.bilibili.com/read/mobile?id=35793664

本文将详细介绍如何使用Node.js连接MongoDB数据库,并使用Mongoose库进行数据库操作。文章将涵盖数据库连接、模型定义和路由处理等多个方面,适合有一定Node.js基础的开发者阅读。

一、封装的版本

首先,需要通过npm安装Mongoose库:

npm install mongoose --save

二、目录结构

三、数据库连接文件

database/connect.js中,我们需要连接到MongoDB数据库:

var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/travel")
    .then(() => {
        console.log("数据库连接成功!");
    })
    .catch((err) => {
        console.log("数据库连接失败!", err)
    })

module.exports = mongoose;

注:如果数据库不能连接,可尝试把 localhost 改成 127.0.0.1 后进行测试。

四、模型定义

database/studentModel.js中,我们需要定义要操作的集合:

var mongoose = require("./connect");
var Schema = mongoose.Schema  
var stuSchema = new Schema({  
    name:String,
    age:Number,
    address:String
})

var stuModel = mongoose.model('student',stuSchema) 

module.exports = stuModel

注:Mongoose 在操作MongoDB时会自动给model的集合名加个s

五、路由处理

routes/student.js中,我们需要处理对MongoDB的增删改查操作:

var express = require('express');
var studentModel = require("./../database/studentModel");
var router = express.Router();

router.get('/list',async function(req, res, next) {
  try{
    let {name,address,current,pageSize} = req.query; 
    let obj = {};
    if(name){
      obj.name = new RegExp(name);
    }
    if(address){
      obj.address = new RegExp(address);
    }

    
    let skip = (current-1)*pageSize;  
    let result =await studentModel.find(obj).skip(skip).limit(pageSize);
    let total = await studentModel.find(obj).countDocuments();
    console.log("total",total);
    res.send({code:0,data:result,message:"成功",count:total});
  }catch(err){
     console.log(err); 
     res.send({code:500,message:"服务器出错",detailMsg:err});
  }
});
router.get('/del', async function(req, res, next) {
  try{
    let {_id} = req.query;
    console.log(_id);
   let result = await studentModel.deleteOne({"_id":_id});

    if(result.deletedCount>0){
      res.send({code:0,message:"删除成功"});
    }else{
      res.send({code:1,message:"删除失败"});
    }

  }catch(err){
     console.log(err); 
     res.send({code:500,message:"服务器出错",detailMsg:err});
  }
});

router.post('/add',async function(req, res, next) {
  try{
    
    let {name,age,address} = req.body;

    let result = await studentModel.insertMany([{name,age,address}]);
    console.log(req.body);
    if(result.length>0){
      res.send({code:0,message:"添加成功"});
    }else{
      res.send({code:1,message:"添加失败"});
    }

  }catch(err){

     res.send({code:500,message:"服务器出错",detailMsg:err});
  }
});

router.get('/getById',async function(req, res, next) {
  try{
    
    let {id} = req.query;

    let result = await studentModel.findOne({"_id":id});
    console.log(req.query);
    console.log(result);
    res.send({code:0,message:"成功",data:result});

  }catch(err){
     console.log(err);
     res.send({code:500,message:"服务器出错",detailMsg:err});
  }
});

router.post('/update',async function(req, res, next) {
  try{
    
    let {id,name,age,address} = req.body;

    let result = await studentModel.updateOne({"_id":id},{$set: {name,age,address}});
    console.log(req.query);
    console.log(result);
    if(result.modifiedCount>0){
      res.send({code:0,message:"修改成功"});
    }else{
      res.send({code:0,message:"修改失败"});
    }
  }catch(err){
     console.log(err);
     res.send({code:500,message:"服务器出错",detailMsg:err});
  }

});
module.exports = router;

注:Mongoose提供的操作集合的方法和MongoDB本身操作集合的方法有些区别。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号