express+monogodb实现增删改查


typora-copy-images-to: images
typora-root-url: ./


express+monogodb实现增删改查

1.在项目中添加mongodb数据库

npm install –save mongoose

2.链接操作

创建目录config

​ config.js 数据库配置文件

​ mongoose.js 数据库链接相关文件

config.js

module.exports={
    mongodb:"mongodb://localhost/ch_db" // 导入数据库连接
};

mongoose.js

var mongoose=require('mongoose');
var config=require('./config.js');           //引入config配置文件夹下的配置文件
module.exports = function(){
    mongoose.connect(config.mongodb);   //创建数据库连接对象db
    //创建mongoose实例对象
    const db = mongoose.connection;
    //连接异常
    db.on('error', (err) => {
        // console.error.bind( '连接错误:')
        console.log('MongoDB连接失败!!')
    })
    //连接成功
    db.once('open', (callback) => {
        console.log('MongoDB连接成功!!')
    })
    //连接断开
    db.on('disconnected', function () {
        console.log('Mongoose connection disconnected');
    });
    return db;
}

3.models文件夹 内创建Schema

  • Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力

创建目录:models

创建文件user.server.model.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
console.log(mongoose)

var UserSchema=new Schema({
    uid:Number,
    username:String,
    createTime:Date,
    lastLogin:Date
});
module.exports = UserSchema;

4.入口文件app.js内调用初始化数据库

注:需要在路由方法之前调用

app.js

//省略...
/* 需要先定义和初始化mongoose */
const mongoose = require('./config/mongoose.js')
const db = mongoose();
app.use('/', indexRouter);
app.use('/user', usersRouter);
//省略...

5.在路由的方法内调用数据库实现增删改查

1.方法调用

var express = require('express');
var router = express.Router();
//创建model,这个地方的ch_user对应mongodb数据库中ch_users的conllection。
//mongoose会自动改成复数,如模型名:xx―>xxes, kitten―>kittens, money还是money
var mongoose = require('mongoose');
var UserSchema = require('../models/user.server.model');
var User=mongoose.model('User',UserSchema);//创建mongoose下model对象

2.实现增删改查

  • 查 find
  • 增 save
  • 改 findOneAndUpdate
  • 删 findOneAndRemove
/* 查 */
router.get('/find',function(req,res,next){
    User.find({
        uid: 1,
        username: 'caopeng'
    }, function (err, docs) {
        if(err){
            console.log('Error:');
            return next();
        }
        res.json(docs);
    });
});
/* 增 */
router.get('/add',function(req,res,next){
    var user=new User({
        uid:1,
        username:'caopeng'
    });
    user.save({
        uid:1,
        username:'caopeng'
    },function(err,doc){
        if(err){
            res.end('Error');
            return next();
        } else {
            console.log(doc)//新增数据成功
            res.json({'result':'新增数据成功'});
        }
    });
    // res.json({'result':'无结果'});
});
/* 更新一条信息 */
router.get("/update", (req, res) => {
    User.findOneAndUpdate(
    //   { _id: req.params.id },
        {username:'caopeng'},
      {
        $set: {
            username: '新的名字',
        }
      },
      {
        new: true
      }
    )
      .then(state => res.json(`${state}修改成功`))
      .catch(err => res.json(err));
});
/* 删除 */
router.get("/delete", (req, res) => {
    // console.log(req.params.id);
    User.findOneAndRemove({
        // _id: req.params.id
        uid:1
    })
    .then(state => res.send(`${state.uid}删除成功`))
    .catch(err => res.json(err));
});
原文地址:https://www.cnblogs.com/NB-JDzhou/p/13717534.html