一些工具的使用
dotenv
在 package.json 的同级目录下创建 .env 文件
# index.js
PORT=5001
... ...
通过 process.env.xxx 读取:
// index.js
import dotenv from 'dotenv'
dotenv.config()
const PORT = process.env.PORT
也可以直接导入 dotenv/config
// index.js
import 'dotenv/config'
const PORT = process.env.PORT
Mongoose
验证是否连接成功:
// db.js
import mongoose from 'mongoose'export const connectDB = async () => {try {const conn = await mongoose.connect(process.env.MONGODB_URL)console.log(`MongoDB connected: ${conn.connection.host}`);} catch (error) {console.log(`MongoDB connected error: ${error}`);}
}
// index.js
app.listen(PORT, () => {console.log('server is running on port:' + PORT);connectDB()
})
输出 MongoDB connected… 代表连接成功

定义模式与模型
import mongoose from 'mongoose'const userSchema = new mongoose.Schema({email: {type: String,required: true,unique: true},... ...}, { timestamps: true }
)const User = mongoose.model('User', userSchema)export default User
增
// 增加一条
const newUser = await User.create({email,fullName,password: hashPassword
})
// 增加多条
// const users = await User.create([{...}, {...}])
// save方式
// const user = new User({...}).save()
删
改
const upadteUser = await User.findByIdAndUpdate(userId, { profilePic: result.secure_url }, { new: true })
配置项:
- new: true 返回修改后的数据
查
可搭配select一起使用
// 查询满足条件的第一条文档
const user = await User.findOne({ email })// 通过id查询
const user = await User.findById(payload.userId).select("-password")
const user = await User.findById(payload.userId).select("fullName email profile")// 查询多个
const filtersUsers = await User.find({ _id: { $ne: loginUserId } })
比较操作符:
- $ne(≠,not equal)
- $eq(=,equal)
- $gt(>,greater than)
- $gte(≥,greater than or equal)
- $lt(<,less than)
- $lte(≤,less than or equal)
- $in(in array)
- $nin(not in array)
逻辑类
- $or(或)
- $and(与)
- $not(非)
- $nor(都不)
bcrypt
将密码转为哈希值后再存入数据库中
import bcrypt from 'bcryptjs
// 注册时
const hashPassword = await bcrypt.hash(password, 12)

登录时,从数据库中取出哈希密码值与用户输入的密码对比是否一致
const isOk = await bcrypt.compare(password, user.password)
jsonwentoken
签发
import jwt from 'jsonwebtoken'
const token = jwt.sign({ userId }, process.env.JWT_SECRET, { expiresIn: '7d' })
验证
// 返回的payload就是上面jwt.sign传进去的{ userId }
const payload = jwt.verify(token, process.env.JWT_SECRET)
cookieParser
在响应头中设置cookie
res.cookie('jwt', token, {maxAge: 7 * 24 * 60 * 60 * 1000,httpOnly: true,sameSite: 'strict',secure: process.env.NODE_ENV !== 'development'
})
从请求头中读取cookie
// 注意!是cookies.jwt,不是cookie.jwt
const token = req.cookies.jwt
cloudinary
配置
import { v2 as cloudinary } from 'cloudinary'cloudinary.config({ cloud_name: process.env.CLOUTINARY_CLOUD_NAME,api_key: process.env.CLOUTINARY_API_KEY,api_secret: process.env.CLOUTINARY_API_SECRET
})export default cloudinary
上传
cloudinary.uploader.upload(profilePic, async (err, result) => {if(err) return res.status(500).json({ message: 'cloudinary上传profilePic失败' })// 返回更新后的数据await User.findByIdAndUpdate(userId, { profilePic: result.secure_url }, { new: true })
})
后续学到再补充~
