Express
安装express
npm i express --save
引入express
模块
const express = require('express')
var app = express()
express
路由
let router = express.Router()
router.get("/get",function(req,res){
})
router.post("/post",function(req,res){
})
常用的模块
详细使用见npm
官网:NPM官网
-
url
解析urlnode
内置模块 -
path
处理路径node
内置模块 -
querystring
处理请求的query
参数node
内置模块 -
multer
文件上传const multer = require('multer') var storage = multer.diskStorage({ //配置上传存储目录 destination: function (req, file, cb) { cb(null, '/tmp/my-uploads') //目录必须存在 }, //修改上传后的文件名 filename: function (req, file, cb) { let extname = path.extname(file.originalname) cb(null, Date.now()+extname) } }) var upload = multer({ storage: storage }) //单个文件上传 router.post("/post",upload.single("file input的name"),function(req,res){ console.log(req.file) //输出 单个上传的文件信息 }) //多个文件上传 router.post("/post",upload.fields([{name: 'file input的name',maxCount: 1},...]),function(req,res){ console.log(req.files) //输出 多个上传的文件信息 })
-
formidable
文件上传 -
sill-datetime
时间格式转换 -
mkdirp
创建目录模块,异步方法创建目录
常用中间件
-
express.static()
内置中间件,暴露静态文件目录app.use(express.static("暴露目录路径"))
-
body-parser
解析post
请求体绑定在req.body
上const bodyParser = require('body-parser') //配置bodyParser app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json())
-
cookie-parser
解析使用cookie
const cookieParser = require('cookie-parser') app.use(cookieParser()) /* maxAge 存活时间 单位ms domain 多域共享 域名 signed 是否加密 设置加密后需要在cookieParser('加密字符串') req.signedCookie 获取加密cookie req.cookie 获取cookie */ // “种” cookie res.cookie("keyname","value",{maxAge:1000*60*60})
-
express-session
使用session
const session = require('express-session') const MongoStore = require('connect-mongo')(session) //session存储在mongoDB app.use(session({ name:'sessionid',//cookie的key secret:'token',//加密签名 saveUninitialized:false,//是否在内容存储前开启会话,默认true resave:true,//每次都重新保存,不管存储内容有没有改变 store:new MongoStore({ url:'mongodb://账号:密码@域名:27017/数据库?authSource=admin', touchAfter:1800 //修改频率 半小时更新一次 }), cookie:{ maxAge:30*1000, //存活30s secure: false //true表示只有https协议才能访问 }, rolling: true //只要请求 就重新设置cookie时间 }))
ejs模板引擎
先安装ejs
npm i ejs --save
express
自动引入ejs
模块
//直接配置模板引擎
app.set("view engine","ejs")
app.set("views",__dirname + '/views') //指定模板文件位置
//使用渲染ejs
res.render("ejs文件名",{
//变量
})
修改文件后缀.ejs
为.html
const ejs = require('ejs')
app.engine("html",ejs.__express)
app.set("view engine","html")
Mongoose
更多的操作方法见官网 Mongoose文档
数据校验参数
-
required
字段必填 -
max
Number类型 最大值 -
min
Number类型 最小值 -
enum
枚举型 数据必须符合枚举值 例:enum:[ 0,1 ] -
maxlength
String类型 最大长度 -
minlength
String类型 最小长度 -
match
正则匹配 - 更多见官网
验证(validation)
①连接数据库
//引入模块
const mongoose = require('mongoose')
//连接数据库
mongoose.connect('mongodb://[账号:密码@]localhost/数据库[?adminSource=admin]',{
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex:true
},function(err){
})
②操作user数据库
//定义Schema
var UserSchema = mongoose.Schema({
name: String,
age: {
//预定义修饰符
type: Number,
index: true, //设置索引
unique: true, //设置唯一索引
default: 0,
trim: true, //去首尾空格
//自定义修饰符
set(params){
//处理代码
}
}
})
//获取user集合模型
var UserModel = mongoose.model('User',UserSchema)//默认映射第一个参数小写字母+s
var UserModel = mongoose.model('User',UserSchema,'user')//映射user表
//查
UserModel.find({},function(err,res){
if(!err){
console.log(res)
}
})
//增
var user = new UserModel({ //实例化模型
name: '张三',
age: 18
})
user.save(function(err){
})
//改
UserModel.updateOne({name:'张三'},{name:'李四'},function(err,res){
if(!err){
console.log(res)
}
})
//删
UserModel.deleteOne({name: '张三'},function(err,res){
if(!err){
console.log(res)
}
})
聚合管道
聚合管道_id
的值还是原生的,不能直接使用String
的方式,需要使用Mongoose.Type.ObjectId(String)
UserModel.aggregate([
{
$lookup:{
from:"goods",
localField:"_id",
foreignField:"kind_id",
as:"goods"
}
},
{
$match: {age:{$gte:18}} //筛选age大于等于18
}
],function(err,res){
});
扩展自己的Schema方法
①静态方法
//以上面UserSchema为例
UserSchema.statics.findByName = function(name,cb){
this.find({name},cb)
}
UserModel.findByName('张三',function(err,res){
if(!err){
console.log(res)
}
})
②实例方法
//以上面UserSchema为例
UserSchema.methods.print = function(){
console.log("实例方法print")
//this 指向实例化的参数对象 例如下面 this = {name:'张三',age:18}
}
var user = new UserModel({ //实例化模型
name: '张三',
age: 18
})
user.print() //输出 "实例方法print"
user.save(function(err){
})