【Node】Express框架简单入门

文章目录

      • 基础与应用
        • 什么是Express?
        • Express起步
        • 路由基础
        • 请求和响应
        • 请求对象
        • 响应对象
      • Express中间件
        • 应用程序级别中间件
        • 路由器级中间件
        • 错误处理中间件
        • 内置中间件
        • 第三方中间件
      • Express 路由
        • 路由方法
        • 路由路径
        • 路径参数
        • 路由处理程序
        • 响应方法
        • app.route()
        • 快速路由器


基础与应用

什么是Express?

Express 是一个快速,简单,极简的 Node.js web 应用开发框架。通过它,可以轻松的构建各种 web 应用。例如

  • 接口服务
  • 传统的 web 网站
  • 开发工具集成等

Express 本身是极简的,仅仅提供了 web 开发的基础功能,但是它通过中间件的方式集成了许许多多的外部插件来处理 HTTP 请求。

  • body-parser:解析 HTTP 请求体
  • compression:压缩 HTTP 响应
  • cookie-parser:解析 cookie 数据
  • cors:处理跨域资源请求
  • morgan:HTTP 请求日志记录

Express 中间件的特性固然强大,但是它所提供的灵活性是一把双刃剑。

  • 它让 Express 本身变得更加灵活和简单
  • 缺点在于虽然有一些中间件包可以解决几乎所有问题或需求,但是挑选合适的包有时也会成为一个挑战

Express 不对 Node.js 已有的特性进行二次抽象,只是在它之上扩展了 web 应用所需的基本功能。

  • 内部使用的还是 http 模块
  • 请求对象继承自 http.IncomingMessage
  • 响应对象继承自:http.ServerResponse

有很多流行框架基于 Express。

  • LoopBack:高度可扩展的开源 Node.js 框架,用于快速创建动态的端到端 REST API。
  • Sails:用于Node.js的 MVC 框架,用于构建实用的,可用于生产的应用程序。
  • NestJs:一个渐进式的 Node.js 框架,用于在 TypeScript 和 JavaScript(ES6,ES7,ES8)之上构建高效,可扩展的企业级服务器端应用程序。

Express 的开发作者是知名的开源项目创建者和协作者 TJ Holowaychuk。

  • GitHub:https://github.com/tj
  • Express、commander、ejs、co、Koa…
Express起步

安装Express:npm install express

使用Express创建一个web服务,并输出Hello World;

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
   
  res.send('Hello World!')
})

app.listen(port, () => {
   
  console.log(`Example app listening at http://localhost:${
     port}`)
})
路由基础

路由是指确定应用程序如何响应客户端对特定端点的请求,该特定端点是URI(或路径)和特定的HTTP请求方法(GET,POST等)。

每个路由可以具有一个或多个处理程序函数,这些函数在匹配该路由时执行。

路由定义采用以下结构:

app.METHOD(PATH, HANDLER)
  • app 是 Express 实例
  • METHOD 是小写的 HTTP 请求方法
  • PATH 是服务器上的路径
  • HANDLER 是当路由匹配时执行的功能

下面是一些例子:

app.get('/', function (req, res) {
   
  res.send('Hello World!')
})

app.post('/', function (req, res) {
   
  res.send('Got a POST request')
})

app.put('/user', function (req, res) {
   
  res.send('Got a PUT request at /user')
})

app.delete('/user', function (req, res) {
   
  res.send('Got a DELETE request at /user')
})
请求和响应

Express 应用使用路由回调函数的参数:requestresponse 对象来处理请求和响应的数据

app.get('/', function (req, res) {
   
   // --
})

Express 不对 Node.js 已有的特性进行二次抽象,只是在它之上扩展了 web 应用所需的基本功能。

请求对象

req 对象代表 HTTP 请求,并具有请求查询字符串,参数,正文,HTTP 标头等的属性。在本文档中,按照约定,该对象始终称为 req(HTTP 响应为 res),但其实际名称由您正在使用的回调函数的参数确定。

属性 说明
req.app
req.body
req.cookies
req.method
req.hostname等等…
响应对象

res 对象表示 Express 应用在收到 HTTP 请求时发送的 HTTP 响应。在本文档中,按照约定,该对象始终称为 res(并且 HTTP 请求为 req),但其实际名称由您正在使用的回调函数的参数确定。

方法 说明
res.send() 响应数据
res.write()
res.end() 结束响应的同时并发送响应数据
res.status() 设置响应码
res.redirect() 重定向

Express中间件

举个例子:

app.get("/", (req, res) => {
   
  console.log(`${
     req.method} ${
     req.url} ${
     Date.now()}`);
  res.send("index");
});

app.get("/about", (req, res) => {
   
  console.log(`${
     req.method} ${
     req.url} ${
     Date.now()}`);
  res.send("about");
});

app.post("/login", (req, res) => {
   
  console.log(`${
     req.method} ${
     req.url} ${
     Date.now()}`);
  res.send("login");
});

针对上面的例子,我们在每个请求中输出 请求方法+请求路径+请求时间,有非常多重复的地方,此时我们想到封装

app.get("/", (req, res) => {
   
  // console.log(`${req.method} ${req.url} ${Date.now()}`)
  logger(req);
  res.send("index");
});

app.get

你可能感兴趣的:(NodeJs,前端,node.js,javascript)