mongoose模块2-金猪脚本(原飞猪脚本)

这中情况module可以动态创建的

安装mongose(前提已经安装mongodb并且启动)

npm install mongoose -s

db.js(导出mongoose模块)

//导包
var mongoose = require('mongoose')
//连接数据库connect
//参数(地址,配置对象,回调)
mongoose.connect('mongodb://localhost/test', {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true
}, function (err) {
    if (err) {
        console.log("连接数据库失败:" + err)
    } else {
        console.log("连接数据库成功")
    }
})
module.exports = mongoose

Schema.js(导出Schema,通过Schema动态创建module)

//导入mongoose对象
const mongoose = require('./db.js');
//2.创建约束对象Schema(定义结构),每个Schema对应一个collection(集合)
let deviceSchema = new mongoose.Schema({
    deviceName: {    //云控编号
        type: String,    //数据类型
        required: true,  //是否必传
        unique: true     //是否唯一
    },
    deviceStatus: {    //状态码
        type: String,    //1空闲2忙碌
        required: true  //,  //是否必传
    },
    deviceGroup: {    //所属分组
        type: String,
        default: "未分组"
    },
    deviceMsg: String,
    deviceTask: {},    //设备任务
    createAT: {    //创建更新时间
        type: Date,
        index: { expires: 30 * 60 }//30分钟后删除设备
    }
})

//导出schema对象
module.exports = deviceSchema;

routes/indexDevices.js(动态创建module)

var express = require('express'),
  router = express.Router();

const mongoose = require('../db/db');
var deviceSchema = require('../db/deviceSchema')


router.get('/', function (req, res) {
  if (req.cookies.islogin) {
    console.log('cookies:' + req.cookies.islogin);
    req.session.username = req.cookies.islogin;
  }

  if (req.session.username) {
    res.locals.username = req.session.username;
  } else {
    res.redirect('/login');
    return;
  }

  //动态创建module
  let deviceModule = mongoose.model('devicemodule' + req.session.username, deviceSchema)
  
  //使用动态创建的module区分不同的用户下设备
  deviceModule.find(function (err, docs) {
    if (docs) {
      res.render('indexDevice', {
        title: '设备列表',
        deviceDocs: docs
      });
    } else {
      res.render('indexDevice', {
        title: '设备列表',
        deviceDocs: []
      });
    }
  })
});

module.exports = router;

配合app.js和ejs完成整个项目

Schema相关

  • Schema数据类型:String Number Date Buffer Boolean Mixed Objectid Array
  • Schema常用字段:
    type: String, //数据类型
    required: true, //是否必传
    unique: true //是否唯一
    default: "未知" //默认值
    lowercase: true, //将值转化为小写
    uppercase: true, //转化为大写
    index:true, //设定索引值
    sparse:true, //是否启用稀疏索引
    match:RegExp, //判断是否通过正则验证
    enum:Array, //判断test值是否包含于enmu对应的数组中
    min:Number, //判断对应值是否大于等于给定值
    max:Number, //判断对应值是否小于等于给定值
    trim:true //去除数据前后的空格
    capped:1024 //限定大小最大为1024字节
    validate:function,为此属性添加一个验证器函数,如demo1所示
    get:function,//为这个属性定义一个定制的getter Object.defineProperty()。如demo2所示
    set:function,//定义此属性的自定义设置Object.defineProperty()。如demo2所示
    如果type是Date 可以设置index:{expires:60}//过期时间

你可能感兴趣的:(mongoose模块2-金猪脚本(原飞猪脚本))