express 详解1

157 阅读3分钟

前言

Express是一个流行的Web框架,它基于Node.js平台构建,用于创建Web应用程序和API。 Express提供了一组强大的功能,包括路由、中间件、模板引擎等。本文就聊一聊该框架的一些技术知识,欢迎大家学习。

一. express框架基本使用

const express = require('express')

// 1.创建express的服务器
const app = express()

// 客户端访问URL: /
app.get('/', (req, res) => {
  res.end('hhhhh')
})

// 2.启动服务器, 并且监听端口
app.listen(9000, () => {
  console.log('express服务器启动成功~')
})

二. express中间件

中间件其实就是传递一个回调函数给express,该回调函数接收三个参数:

✓ 请求对象(request对象);

✓ 响应对象(response对象);

✓ next函数(在express中定义的用于执行下一个中间件的函数);

image.png

举例1:通过使用app.use()和app.METHOD()函数将应用级中间件绑定到app对象的一个实例上,其中METHOD是中间件函数处理的请求的HTTP方法(如GET、PUT或POST),小写。

这个例子显示了一个没有加载路径的中间件函数。每次应用程序收到请求时都会执行该函数。

const express = require('express')

const app = express()

// 给express创建的app传入一个回调函数
// 传入的这个回调函数就称之为是中间件(middleware)
var express = require('express')
var app = express()

app.use(function (req, res, next) {
  console.log('Time:', Date.now())
  next()
})
app.use((req, res, next) => {
  console.log('normal middleware 02')
})

注意:第二个中间件是否调用,取决于上一个中间件有没有写next(),没写就不会运行第二个。 如果当前中间件功能没有结束请求-响应周期,则必须调用next()将控制权传递给下一个中间件功能,否则,请求将被挂起。

举例2:这个例子显示了一个安装在/user/:id路径上的中间件函数。该函数对/user/:id路径上的任何类型的HTTP请求都被执行。

//路径匹配的中间件是不会对请求方式(method)进行限制
app.use('/user/:id', function (req, res, next) {
  console.log('Request Type:', req.method)
  next()
})

举例3:这个例子可以发现可以同时注册多个中间件

// 注册中间件: 对path/method都有限制
// app.method(path, middleware)
app.get('/user/:id', function (req, res, next) {
  console.log('ID:', req.params.id)
  next()
}, function (req, res, next) {
  res.send('User Info')
})

三. express 处理静态资源

为了提供诸如图像、CSS 文件和 JavaScript 文件之类的静态文件,请使用 Express 中的 express.static 内置中间件函数。

express.static(root, [options])

举例1: 通过如下代码就可以将 public ,files目录下的图片、CSS 文件、JavaScript 文件对外开放访问了

//如果要使用多个静态资源目录,请多次调用 `express.static` 中间件函数:
app.use(express.static('public'))
app.use(express.static('files'))

举例2:要为express.static函数提供的文件创建一个虚拟路径前缀(文件系统中的路径实际上并不存在),请为静态目录指定一个挂载路径,如下图所示:

app.use('/static', express.static('public'))

image.png

然而,你提供给 express.static 函数的路径是相对于你启动节点进程的目录的。如果你从另一个目录中运行express应用程序,那么使用你想服务的目录的绝对路径会更安全:

const path = require('path')
app.use('/static', express.static(path.join(__dirname, 'public')))

结束语

本篇只撰写了一些基本使用方式,后续会根据实际场景,添加一些中间件处理参数的方式。