express学习笔记(get,post请求,中间件,路由, app.js页面解释与理解)

获取get请求

下面代码就是设置一个get请求,当输入内容到input框,就会把输入的值作为input框name属性的值,并且把这个name的值当成参数,发送网络请求

// js
app.get('/',(req,res)=>{
  res.render('index.ejs')
})

// ejs
    <form action="/search">
      <input type="text" name="searchKey"/>
      <button type="submit">搜索</button>
    </form>

在这里插入图片描述
在这里插入图片描述
写接口进行接收

app.get('/search',(req,res)=>{
  console.log(req.url);
  res.send('成功')
})

// 输出 /search?searchKey=%E5%A4%A7%E5%A4%A7%E5%82%BB%E9%80%BC
// 就可以拿到发送请求的值

取出来(自己封装的)


app.get('/search',(req,res)=>{
  let queryStr = req.url.split('?')[1]
  console.log(queryStr);
  let queryArr = queryStr.split("&")  // 拿到两个参数的数组
  // 把获取的值放到一个对象中
  let query = {}
  queryArr.forEach(item =>{
    let valueKey = item.split("=")
    let key = valueKey[0]
    let value = valueKey[1]
    query[key] = value
  })
  console.log(query);
  // 通关这种方式拿到里面的值
  console.log(query.userName);
  
  res.send('成功')
})

使用express封装好的query属性

app.get('/search',(req,res)=>{
  console.log(req.query);
  // 可以拿到上面的query对象
})

获取post请求

首先我们得知道在form表单进行post请求,enctype属性一般设置为“application/x-www-form-urlencoded”,如果设置成multipart/form-data,则多用于文件上传,如

<form action="#" method="post" enctype="application/x-www-form-urlencoded">
</form>

使用

// 首先需要设置解析body中间件
app.use(express.urlencoded())
app.post('/search',(req,res)=>{
  // post 请求的数据放在req.body中,并且在url上是没有的
  // 要通关body拿到数据,需要  app.use(express.urlencoded()) 
  console.log(req.body);
})

写一个简单登录

    <form action="/login" method="POST">
      <input type="text" name="userName"/>
      <input type="password" name="passWord"/>
      <button type="submit">登录</button>
    </form>
app.use(express.urlencoded())
app.post('/login',async (req,res)=>{
  let userName = req.body.userName
  let passWord = req.body.passWord
  let sqlStr = 'select * from user where userName = ? and passWord = ?'
  // 直接把数据定义到数组当中
  let sqlArr = [userName,passWord]
  let result = await aamysql(sqlStr,sqlArr)
  if (result.length === 0) {
    res.send('失败')
  }else{
    res.send('成功')
  }
})

中间件

含义,中间件的作用于在express接收到请求 到 调用(req,res)的回调函数 这个中间时候产生作用的东西
注意,中间件代码不需要写在接收请求方法(get,post)方法前面才会有效果
在这里插入图片描述
中间件的作用

  • 执行任何代码。
  • 对请求和响应对象进行更改。(req,res)
  • 结束请求/响应循环。
  • 调用堆栈中的下一个中间件函数。
    使用
// app的use方法就是使用中间件。里面传一个函数
app.use(function(req,res,next){
  let queryaa =  req.url.split('?')
  if (queryaa.length > 0) {
    let queryStr = queryaa[1]
    if (queryStr) {
      let queryArr = queryStr.split("&")  // 拿到两个参数的数组
      let aa = {}
      queryArr.forEach(item =>{
        let valueKey = item.split("=")
        let key = valueKey[0]
        let value = valueKey[1]
        aa[key] = value
      })
      req.aa = aa
      next()
    }
  }else{
    next()
  }
})
// app的use方法就是使用中间件。里面传一个函数
app.use(function(req,res,next){
// 在req定义一个方法
  req.bb = function (a,b){
    return a+b
  }
  next()
})
app.get('/',(req,res)=>{
// 这里就可以使用
  res.send('这是首页'+req.bb(1,2))
  console.log(req.aa);
  
})

路由中间件

// 路由中间件的使用

let router1 = express.Router()
// 也可以使用中间件
router1.use(function(req,res,next){
  console.log('判断是否是商场用户');
  next()
})

router1.get('/',(req,res)=>{
  res.send('这是商场首页')
})
router1.get('/list',(req,res)=>{
  res.send('这是分类页面')
})
app.use('/mail',router1)

// 在我们在浏览器上输入 /mail 就可以达到  这是商场首页  输入/mail/list 可以到达 是分类页面

在中间件中写跨域

app.use(function(req,res,next){
	res.append('Access-Control-Allow-Origin','*')  // 代表所有源头都可以访问
	res.append('Access-Control-Allow-Content','*')  // 代表所有的请求都可以成功

}
)

app.js页面解释与理解

// 报错模块
var createError = require('http-errors');

var express = require('express');
var path = require('path');
// 解析cookie的文件
var cookieParser = require('cookie-parser');

// 设置输出日志的
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// 下面是中间件
// 视图
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// 开发环境的错误日志输出
app.use(logger('dev'));

// 解析json数据
app.use(express.json());
// 解析body
app.use(express.urlencoded({ extended: false }));
// 解析cookie
app.use(cookieParser());
// 形成静态服务器
app.use(express.static(path.join(__dirname, 'public')));

// 路由中间件
app.use('/', indexRouter);
app.use('/users', usersRouter);

// 当请求都无法从上面提供对应的东西,就会报404错误,这里就是设置404错误的地方
app.use(function(req, res, next) {
  // 这里就可以设置自定义的404页面
  next(createError(404));
});

// 进行错误处理
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  // 如果在开发环境(运行)就把错误报出来
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值