doubleyong
管理员
管理员
  • 最后登录2025-02-06
  • 发帖数1196
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:1231回复:0

[nodejs]node.js连接mongodb数据库(mongoose)

楼主#
更多 发布于:2024-08-23 11:56
一、封装的版本
npm install mongoose --save

二、目录结构

|-- database //操作数据的文件夹
   |-- connect.js  //连接mongo数据库的文件
   |-- studentModel.js //操作student的数据操作
|--routes //路由文件夹
   |-- student.js //student的相关路由
   |-- user.js //user的相关路由
app.js //程序的入口文件
package.json //项目依赖的配置信息



三、示例代码
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;


database/studentModel( 指定要操作的集合)
每个集合,建立对应的Model文件
注:mongoose 在操作mongodb时会自己给model的集合名加个s
// 约定数据表字段格式      对象(汽车)  对象的实例(玛莎拉蒂)
// 定义操作数据表的对象模型
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



routes/student.js(在路由文件处理时,操作mongoDb)
var express = require('express');
var studentModel = require("./../database/studentModel");
var router = express.Router();
/* GET users listing. */
router.get('/list',async function(req, res, next) {
  try{
    let {name,address,current,pageSize} = req.query; //获取传过来的name
    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{
    //1. 接收客户端传的数据
    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}); 
  }
});
//根据id查找对应的数据
router.get('/getById',async function(req, res, next) {
  try{
    //1. 接收客户端传的数据
    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}); 
  }
});
//根据id,更新数据
router.post('/update',async function(req, res, next) {
  try{
    //1. 接收客户端传的数据
    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本身操作集合的方法有些区别。

知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号