同步异步问题
- 首先几乎所有的操作都需要异步操作,所以在操作前使用async await能避免很多错误
exports.getuserList = async(req,res)=>{
let userList = await User.find()
const user = await User.findById(id.toString()).select(filterStr)
}
数据模型封装与校验
const mongoose = require("mongoose")
const joi = require('@hapi/joi')
const config = require("../config")
const jwt = require('jsonwebtoken')
joi.objectId =require("joi-objectid")(joi)
const userSchema = new mongoose.Schema({
email:{
type:String,
required:true,
minlength:6,
maxlength:20,
unique:true
},
name:{
type:String,
required:true,
minlength:2,
maxlength:20,
},
password:{
type:String,
required:true,
minlength:6,
maxlength:100,
select:false
},
})
const User = mongoose.model("User",userSchema)
const userValidator =(data)=>{
const schema = joi.object({
email:joi.string().email().trim().lowercase().min(6).max(20).required(),
name:joi.string().min(4).max(10).required(),
password:joi.string().pattern(/^[a-zA-Z0-9]{6,1000}$/).required(),
_id:joi.objectId(),
})
return schema.validate(data)
}
userSchema.methods.generateToken = function(){
return jwt.sign({
_id:this._id
},config.secret,{expiresIn:'1h'})
}
module.exports ={User,userValidator}
封装验证请求模块
module.exports =(validator)=>{
return (req,res,next)=>{
const {error,value} = validator(req.body)
if(error) return res.send({status:400,original:error._original,err:error.details[0].message})
req.validator =value
next()
}
}
const express = require('express')
const router = express.Router()
const {userValidator} = require('../model/user')
const validator = require('../middleware/validator')
const user = require('../controller/user')
const auth = require('../middleware/auth')
const checkUser = require('../middleware/checkUser')
router.post("/user",validator(userValidator),user.register)
Mongodb语法学习
const data = await User.findByIdAndDelete({_id:id.toString()})
let user = await User.findOne({email})
const user = await User.findById(id.toString()).select(filterStr)
const data = await User.findByIdAndUpdate({_id:id.toString()},body)
const user = await User.findById(userId.toString()).select("+following").populate("following")
const Totalcount = await Topic.find().count()
const topicList = await Topic.find({name:{$regex:req.query.keyword,$options:"$i"}}).limit(pageCount).skip(page * pageCount)
users = new User({
name,
email,
password,
})
await users.save()
查询条件符号
user.find({name:{$ne:'java'})
- $gt(大于) $gte(大于等于) $lt(小于) $lte(小于等于)
user.find({age: {$gt:13}})
user.find({name:{$in:'李四'}})
user.find({name:{$in:['王五,李四']}})
user.find({user:{$all:["夏利","王五"]}})
模糊匹配
user.find({name:/王$/})
user.find({name:/李$/})
user.find({name:/橘子/})
user.find({name:/^绝绝子$/})
user.find({from:/a/i})
user.find({name:{$regex:req.query.keyword,$options:"$i"}})
user.find({author:{$exists:true}})
user.find({author:{$exists:false}})
user.find({age:{$type:1}})
user.find({age:{$type:2}})
user.find({author:{$elemMatch:{authorName:"小李"}}})
user.find({author.authorName:"王强"})
user.find({age:{$regex:"O"}})