express以及session、cookie

express

1.1、安装

npm init -y
npm i -S express
npm i -D nodemon    //执行node程序,并实时监听文件变化,文件有变化时,无需重启,它会自动重启

1.2、创建web服务

const express = require('express')
// 创建web服务
const app = express()

// 监听 get请求
// req 请求对象
// res 响应对象
app.get('请求URI',(req,res)=>{
	// 向客户端响应数据
	res.send({id:1,name:'张三'})
})

// 监听POST请求
app.post('请求URI',(req,res)=>{})

put/delete/use 等
app.use()  模糊接受所有的请求

// 启动服务
app.listen(8080,()=>{})

//获取URL中的查询参数 ,通过 req.query 对象
app.get('/',(req,res)=>{
	console.log(req.query)
})

//获取URL中的动态参数,通过通过 req.params 对象
app.get('/:id',(req,res)=>{
	console.log(req.params)
})

1.3、静态资源管理

// 引入express模块
const express = require('express')
// 执行express函数,得到服务对象
const app = express()
// 开启服务器并绑定对应的主机和端口
app.listen(3000, '0.0.0.0', () => {
  console.log('服务器启动');
})
// 静态资源服务器  可以设置多个
app.use(express.static('www'))
app.use(express.static('web'))
// 访问的前缀 在uri开头以 /admin开始则进行静态管理
app.use('/admin', express.static('admin'))
/* app.use(express.static('www', {
  etag: false
})) */

1.4、路由

路由基本信息

// 引入express模块
const express = require('express')
// 执行express函数,得到服务对象
const app = express()
// 开启服务器并绑定对应的主机和端口
app.listen(3000, '0.0.0.0', () => {
  console.log('服务器启动');
})

// 定义路由
// express对象.http请求动作(pathname,处理回函数)
// get请求 获取   200
app.get('/user', (req, res) => {
  // 响应
  res.send('user')
})

// post请求  添加  201
app.post('/user', (req, res) => {
  let postData = ''
  req.on('data', chunk => postData += chunk)
  req.on('end', () => {
    res.send(postData)
  })
})

// 修改  完全修改(put)和增量修改(patch)  201/202
app.put('/user', (req, res) => {
  res.send('put')
})

// 删除 delete  http状态码 204 => 没有响应体
app.delete('/user', (req, res) => {
  res.send('delete')
})

1.4.1、路由模块化

入口文件

// 引入express模块
const express = require('express')
// 执行express函数,得到服务对象
const app = express()
// 开启服务器并绑定对应的主机和端口
app.listen(3000, '0.0.0.0', () => {
  console.log('服务器启动');
})

// 定义路由
// 匹配规则: 从文件上向下匹配,一旦匹配成功则不向下执行(默认)
// 书写规则: 精确写上面,模糊写在下面 


// 获取所有的http请求动作   精确匹配  /user
/* app.all('/user', (req, res) => {
  res.send(req.method)
}) */

// 精确
app.get('/user/100', (req, res) => {
  res.send('user/100')
})

// 动态路由参数  如果动态路由参数中 ? 可选参数 可传可不传
/* app.get('/user/:id', (req, res) => {
  res.send('user/200')
}) */
app.get('/user/:id/:name?', (req, res) => {
  res.send(req.params)
})



// 通配符 * 所有   可以用它来做 404页面
/* app.all('*', (req, res) => {
  res.status(404).send('404页面')
}) */

// 获取所有的http请求动作  模糊匹配  /user  /user/a  /user/b /user/...
// 请求以/user开头的路由
/* app.use('/user', (req, res) => {
  res.send(req.method)
})
 */
// 所有的请求
app.use((req, res) => {
  res.status(404).send('404页面!!')
})

控制器文件,control

// 用户控制器
// 数据
const users = require('../models/userModel')

module.exports = {
  // 用户列表
  index(req, res) {
    res.send({
      code: 0,
      msg: 'ok',
      data: users
    })
  },
  // 查看当前id用户信息
  show(req, res) {
    let ret = users.find(item => item.id == req.params.id)
    if (ret) {
      res.send({
        code: 0,
        msg: 'ok',
        data: ret
      })
    } else {
      res.send({
        code: 1000,
        msg: 'ok',
        data: null
      })
    }
  },
  store(req,res){

    // 在此处写md5加密  专门加密 -》 交给下一个  req或res用自定义属性 req.pass = md5(admin)  next()
    // 添加用户  -> 向数据库写数据 -> req.userinfo = {}  next()
    // 给用户响应 res.send(req.userinfo)

  }

models数据文件

// 用户数据  mysql mongodb ...
module.exports = [
  { id: 1, name: '张三', pass: 'aa' },
  { id: 2, name: '李四', pass: 'bb' },
];

1.5、中间件

中间件分为:
内置中间件 也就是express本身自带无带npm安装
第三方中间件

1.5.1、自定义中间件和内置和第三方
//自定义中间件
function mfn(req,res,next){
	
	// 中间件最后一定要执行此函数,否则程序无法向下执行下去
	next()
}

//内置中间件
app.use(express.static('托管目录地址'))

//==============================================
npm i -S body-parser
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
app.listen(3000)

// 关联
// querystring / qs
// application/x-www-form-urlencoded
/* app.use(bodyParser.urlencoded({ extended: false }))
// application/json
app.use(bodyParser.json()) */

app.use(express.urlencoded({ extended: false }))
app.use(express.json())

app.post('/login', (req, res) => {
  res.send(req.body)
})

1.6、cookie

cookie: 服务器端向客户端发送cookie并指定cookie的过期时间。 浏览器将cookie保存起来。之后每次请求都会将cookie发向服务器端,在cookie没有过期时间内服务器都可以得到cookie中的值。

const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
// 中间件引入
app.use(cookieParser());

app.get('/', (req, res) => {
  // 服务器端通过req来获取cookie数据
  if (req.cookies.username) {
    console.log(req.cookies);
    res.send('再次欢迎你');
  } else {
// cookie设置过期时间为1天
// maxAge 设置cookie过期时间  毫秒
    res.cookie('username', 'admin', {maxAge: 86400*1000});
    res.send('欢迎你~');
  }
});

app.listen(3000)

1.7、session

session中的数据保留在服务端的。session的原理是通过一个sessionid来进行的,sessionid是放在客户端的cookie中,当请求到来时候,服务端会检查cookie中保存的sessionid是否有,并且与服务端的session数据映射起来,进行数据的保存和修改,也就是说当我们浏览一个网页时候,服务端会随机生成一个1024比特长的字符串,然后存在cookie中的sessionid字段中,当我们下次访问时,cookie会带有sessionid这个字段。

const express = require('express');
const session = require('cookie-session');
const app = express();

app.use(session({
  name: 'sessionId',
  // 给sessionid加密的key,随便填写s
  secret: 'afsfwefwlfjewlfewfef',
  //maxAge: 20 * 60 * 1000 // 20分钟
}));

app.get('/, (req, res) => {
  if(!req.session['view']){
    req.session['view'] = 1;
  }else{
    req.session['view']++;
  }
  res.send(`欢迎您第 ${req.session['view']} 次访问!`);
})
app.listen(3000)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值