mongodb和模板引擎

95 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情 mongoose验证:

  • 在创建集合规则的时候,可以设置当前字段的验证规则,验证失败就不允许插入

    • 必填:required

    • 字符串最小长度:minlength

    • 字符串最大长度:maxlength

    • 去除字符串两边的空格:trim

    • 可以用数组的形式的第二个参数指定错误消息,如:

      new mongoose.Schema({
        name: String,
        age: Number,
        stuNo: {
          type: String,
          required: true,
          minlength: [2, '学号太短了'] 
        }
      })
      
    • 最小值:min

    • 最大值:max

    • 默认值:default

    • 枚举值:enum,规定了可选值,只能从规定的这几个值里面选择

    • 自定义规则:validate,范例:

      new mongoose.Schema({
        age: {
          type: Number,
          validate: {
            // 验证器,验证函数,如果想让这个验证通过,那么返回true,否则返回false
            validator: (v) => {
              // 这个v就是实际要验证的值
              return v >= 18 && v <= 100
            },
            // 错误消息
            message: '您的年龄填写错误'
          }
        }
      })
      

捕获mongoose错误消息:

User.create({ ... })
  .then(...)
	// 所有验证错误的字段信息都是以键值对的形式存储在错误对象中
  .catch({ errors } => {
  	for (let key in errors) {
      const { message } = errors[key]
      console.log(message) // 错误消息
    }
	})

集合关联:

  • 使用唯一标识id对集合进行关联,类型是:mongoose.Schema.Types.ObjectId,需要添加 ref: 集合名称 属性

    • 注意:这个ref属性的集合名称是以内存中的集合名称为准,并不是数据库中的集合名称
  • 可以使用poppulate方法来对集合关联查询

  • 范例:

    
    const mongoose = require('mongoose')
    
    ;(async () => {
      
      // 集合规则和集合一起创建的
      const User = mongoose.model('User', {
        name: String
      }, 'User')
      
     	// 集合规则和集合一起创建的
      const Article = mongoose.model('Article', {
        title: String,
        author: {
          type: mongoose.Schema.Types.ObjectId,
          ref: 'User'
        }
      }, 'Article')
    
    	const articleArr = await Article.find().populate('author')
      console.log(articleArr)
    })()
    

模板引擎:

  • 模板引擎就是用来合成字符串的

  • art-template第三方模块,是腾讯公司开发的,模板的解析速度是比较快的

    • 安装:npm i art-template
    • 导入:const template = require('art-template')
    • 调用:const htmlStr = template('模板文件的绝对路径', { 数据键值对 })
    • 模板文件可以用两对花括号来引用数据对象中的属性:{{ 数据键名 }}
  • 我们不一定必须用.art的文件后缀,也可以用.html的文件

  • 范例:

    • JS:

      const template = require('art-template')
      const path = require('path')
      
      const htmlStr = template(path.join(__dirname, 'views', 'index.html'), {
        name: 'zs',
        age: 18
      })
      
      console.log(htmlStr)
      
    • HTML:

      <!DOCTYPE html>
      <html lang="en">
      
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
      </head>
      
      <body>
        <span>姓名:{{ name }}</span>
        <br>
        <span>年龄:{{ age }}</span>
      </body>
      
      </html>