一、mongoose 預(yù)定義模式修飾符
mongoose 提供的預(yù)定義模式修飾符,可以對我們增加的數(shù)據(jù)進(jìn)行一些格式化。mongoose提供了lowercase、uppercase 、trim預(yù)定義模式修飾符,其中trim能夠?qū)ψ侄螖?shù)據(jù)做兩端去空格的格式化:
/*定義帶trim修飾符的Schema*/
const NewsSchema = mongoose.Schema({
title: {
type:String,
trim: true
},
author: String,
pic:String,
content: String,
status: {
type: Number,
default: 1
}
});
const News = mongoose.model('News', NewsSchema, 'news');
module.exports = News;
const News = require('./myDatabase/news');
/*添加數(shù)據(jù)時,將title字段的數(shù)據(jù)兩端加一些空格*/
const news = new News({
title:' 最新新聞007 ',
author:'joyitsai',
pic:'07.png',
content:'新聞內(nèi)容007'
});
news.save((err, docs)=>{
if(err){
console.log('添加數(shù)據(jù)出錯');
return;
}
console.log(docs);
});
添加數(shù)據(jù)成功后,查看發(fā)現(xiàn)數(shù)據(jù)如下:
{ "_id" : ObjectId("5cf72b415b4e487a34c85cb4"), "status" : 1, "title" : "最新新聞007", "author" :
"joyitsai", "pic" : "07.png", "content" : "新聞內(nèi)容007", "__v" : 0 }
你會發(fā)現(xiàn),剛剛添加的數(shù)據(jù)中title字段數(shù)據(jù)兩端的空格被格式化去掉了,就是trim的作用。
二、Mongoose Getters 與Setters 自定義修飾符
除了mongoose 內(nèi)置的修飾符以外,我們還可以通過set(建議使用) 修飾符在增加數(shù)據(jù)的時候?qū)?shù)據(jù)進(jìn)行格式化。也可以通過get(不建議使用)在實(shí)例獲取數(shù)據(jù)的時候?qū)?shù)據(jù)進(jìn)行格式化。
2.1 Setters
set(用戶添加數(shù)據(jù)){ return 真正添加到數(shù)據(jù)庫的數(shù)據(jù)}來自定義修飾符,在set內(nèi)部對用戶添加的數(shù)據(jù)進(jìn)行格式化操作,最終返回格式化后的數(shù)據(jù)作為真正存入數(shù)據(jù)庫的數(shù)據(jù):
const NewsSchema = mongoose.Schema({
title: {
type:String,
trim: true
},
author: String,
/*
url為空,則返回空的url;
url前面沒有`http://`或`https:// `,則在前面拼接上`http://`
返回帶有`http://`或`https://`的url,作為存入數(shù)據(jù)庫的數(shù)據(jù)
*/
redirect: {
type: String,
set(url){
if(!url) return url;
if(url.indexOf('http://')!=0 && url.indexOf('https://')!=0){
url = 'http://' + url;
}
return url;
}
}
});
const News = mongoose.model('News', NewsSchema, 'news');
module.exports = News;
添加數(shù)據(jù)時,向redirect字段添加一個www.baidu.com,然后查看存入數(shù)據(jù)庫的數(shù)據(jù)是否是http://www.baidu.com,如果是,說明set自定義修飾符有效了:
const News = require('./myDatabase/news');
const news = new News({
title:' 最新新聞007 ',
author: 'joyitsai',
redirect: 'www.baidu.com'
});
news.save((err, docs)=>{
if(err){
console.log('添加數(shù)據(jù)出錯');
return;
}
console.log(docs);
});
查看一下數(shù)據(jù):
{ "_id" : ObjectId("5cf731f8d8bda03afc8367b7"), "title" : "最新新聞007", "author" : "joyitsai",
"redirect" : "http://www.baidu.com", "__v" : 0 }
set自定義修飾符有效了。
2.2 Getters
get將用戶添加的數(shù)據(jù)格式化后,并沒有存入數(shù)據(jù)庫;僅僅是用戶在實(shí)例化模型時,這個實(shí)例中的數(shù)據(jù)被做了格式化操作,在常規(guī)應(yīng)用中意義不大。