当前位置:网站首页>Express、路由(Route)、Request对象、Response对象、中间件、EJS模板

Express、路由(Route)、Request对象、Response对象、中间件、EJS模板

2022-06-22 21:24:00 半夜删你代码·

Express

Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你快速创建各种 Web 和移动设备应用。

简单来说Express就是运行在node中的用来搭建服务器的模块。

Express的使用:

(1)下载

npm i express --save   安装express并添加到依赖项

 (2)第一个服务器

//引入express模块
 var express = require('express') //创建应用对象
 var app = express() //配置静态资源
 app.use(express.static('public')) //开启服务器,监听3000端口
 app.listen(3000)

 路由(Route)

路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。

路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成的。

Route的定义:

我们可以将路由定义为三个部分:

第一部分:HTTP请求的方法(get或post)

第二部分:URI路径

第三部分: 回调函数

Route的实现

Express中提供了一系列函数,可以让我们很方便的实现路由: 

app.<method>(path,callback)

语法解析:

method指的是HTTP请求方法,比如:

app.get()

app.post()

path指要通过回调函数来处理的URL地址

callback参数是应该处理该请求并把响应发回客户端的请求处理程序

 Route的实例

//引入express
var express = require('express')
//创建应用对象
var app = express()
//配置路由
app.get('/index', function (request, response) {
  console.log('路由index收到get请求')
  response.send('这里是路由返回的信息,/hello收到了get请求')
})

app.post('/index', function (request, response) {
  console.log('路由index收到post请求')
  response.send('这里是路由返回的信息,/hello收到了post请求')
})

//启动服务器
app.listen(3000, function () {
  console.log('服务器启动成功,监听3000端口')
})

Route的运行流程

当Express服务器接收到一个HTTP请求时,它会查找已经为适当的HTTP方法和路径定义的路由

如果找到一个,Request和Response对象会被创建,并被传递给路由的回调函数

我们便可以通过Request对象读取请求,通过Response对象返回响应

Express中还提供了all()方法,可以处理两种请求。

Request对象

Request对象是路由回调函数中的第一个参数,代表了用户发送给服务器的请求信息

通过Request对象可以读取用户发送的请求包括URL地址中的查询字符串中的参数,和post请求的请求体中的参数。

 Request对象属性和方法:

属性/方法

描述

request.query

获取get请求查询字符串的参数,拿到的是一个对象

request.params

获取get请求参数路由的参数,拿到的是一个对象

request.body

获取post请求体,拿到的是一个对象(要借助一个中间件)

request.get(xxxx)

获取请求头中指定key对应的value

Response对象

Response对象是路由回调函数中的第二个参数,代表了服务器发送给用户的响应信息。

通过Response对象可以设置响应报文中的各个内容,包括响应头和响应体。

Response对象的属性和方法:

属性/方法

描述

response.send()

给浏览器做出一个响应

response.end()

给浏览器做出一个响应(不会自动追加响应头)

response.download()

告诉浏览器下载一个文件

response.sendFile()

给浏览器发送一个文件

response.redirect()

重定向到一个新的地址(url)

response.set(header,value)

自定义响应头内容

res.status(code)

设置响应状态码

中间件

Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:从本质上来说,一个 Express 应用就是在调用各种中间件。

中间件(Middleware) 是一个函数,它可以访问请求对象(request), 响应对象(response), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。

 中间件功能

  1. 执行任何代码。
  2. 修改请求和响应对象。
  3. 终结请求-响应循环。
  4. 调用堆栈中的下一个中间件。

 中间件的分类

  1. 应用级中间件(过滤非法的请求,例如防盗链)
  2. 第三方中间件(通过npm下载的中间件,例如body-parser)
  3. 内置中间件(express内部封装好的中间件)
  4. 路由器中间件 (Router)

中间件实例

//引入express
var express = require('express')
//创建应用对象
var app = express()
//配置静态资源
app.use(express.static('public'))
//中间件,没有挂载路径,应用的每个请求都会执行该中间件
app.use(function (req, res, next) {
  console.log('这是中间件的响应~~~')
  //如果不调用next方法,下面路由将不起作用
  next()
})
//配置路由
app.get('/index', function (req, res) {
  console.log('路由index收到get请求')
  res.send('这里是路由返回的信息,/hello收到了get请求')
})

app.post('/index', function (req, res) {
  console.log('路由index收到post请求')
  res.send('这里是路由返回的信息,/hello收到了post请求')
})

//启动服务器
app.listen(3000, function () {
  console.log('服务器启动成功,监听3000端口')
})

 

Router路由器

Router 是一个完整的中间件和路由系统,也可以看做是一个小型的app对象。

 为什么使用Router?  --为了更好的分类管理route

Router的使用

//引入express模块
var express = require('express');
//引入body-parser模块
var bodyParser = require('body-parser');
//引入Users模型对象
var Users = require('../models/Users');
//创建router对象
var router = express.Router();
//解析请求体,将参数挂在到req.body
router.use(bodyParser.urlencoded({extended: false}));
router.post('/login', function (req, res) {
  var username = req.body.username;
  var password = req.body.password;
  Users.findOne({username: username}, function (err, data) {
    if (!err && data && data.password === password) {
      res.send('恭喜您登录成功~~~');
    } else {
      res.send('用户名或密码错误~~~');
    }
  })
})
router.post('/regist', function (req, res) {
  //获取用户提交的参数
  var username = req.body.username;
  var password = req.body.password;
  var rePassword = req.body.rePassword;
  var email = req.body.email;
  /*
    1. 正则验证(-)
    2. 密码和确认密码是否一致
    3. 去数据库中查找有无此用户名
    4. 插入数据
   */
  //判断密码和确认密码是否一致
  if (password !== rePassword) {
    res.send('两次密码输入不一致,请重新输入~~');
    return
  }
  //去数据库中查找有无此用户名
  Users.findOne({username: username}, function (err, data) {
    if (!err) {
      /*
        data
          如果查到了  返回文档对象
          如果没找到  返回null
       */
      if (data) {
        // 查到了指定用户名
        res.send(data.username + '用户名已被注册~~请重新输入');
      } else {
        // 没有找到指定有户名,将用户信息插入到数据库中
        Users.create({
          username: username,
          password: password,
          email: email
        }, function (err) {
          if (!err) {
            res.send('恭喜您,注册成功了~~');
          } else {
            res.send('error');
          }
        })
      }
    } else {
      res.send('error');
    }
  })
})
//暴露路由器对象
module.exports = router


EJS模板 

EJS是一个高效的 JavaScript 模板引擎。

模板引擎是为了使用户界面与业务数据(内容)分离而产生的。

简单来说,使用EJS模板引擎就能动态渲染数据。

 EJS的使用:

1.下载安装

        npm i ejs --save

2.配置模板引擎

app.set("view engine" , "ejs");

3.配置模板的存放目录

app.set("views","./views")

4.在views目录下创建模板文件

xxx.ejs

5.使用模板,通过response来渲染模板

response.render(‘模板名称’, 数据对象)

EJS语法

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<h1>Hello EJS,这是我的第一个EJS</h1>
//<% code %> 执行其中的JS代码
<%
    console.log("Hello EJS");
    var a = 30;
%>

//<%=username%> 输出转义的数据到模板上
<h2>用户名 : <%=username%></h2>
//<%-username%> 输出非转义的数据到模板上
<h2>用户名 : <%-username%></h2>

//<% %> 可以包含JS代码与下面拼接在一起
<%
    if(a==20){
%>

<h3>a的值是20</h3>

<%
    }
%>

<%
for(var i=0 ; i<3 ; i++){
%>

<h3>老师真帅啊!!!!!</h3>

<%
}
%>

</body>
</html>

 

原网站

版权声明
本文为[半夜删你代码·]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_60376759/article/details/125398425