Express API 总结

177 阅读4分钟

参考资料

express API 官方文档 (看文档)
devdocs.io express(查文档)

Express API(五部分)

  1. express.xxx - 内置中间件
  2. app.xxx - 应用设置 (如模板配置、中间件、挂载路由)
  3. req.xxx - 操作请求
  4. res.xxx - 操作响应
  5. router.xxx - 操作路由

1. express.xxx - 内置中间件(共7个API)

需要特别学习的 API

  • express.json()
    将客户端提交的 JSON 格式的数据解析到 req.body 中,以便在服务器端处理这些数据。
// 例如,如果你想要向客户端提供一个名为 public 的目录,
// 里面包含一些静态资源文件,你可以使用如下代码:
app.use(express.static('public'));
  • express.static()
    主要用于向客户端提供静态资源文件(如 HTML、CSS、JavaScript、图像、字体等)。
    这个中间件函数可以将包含静态文件的目录作为参数传递,然后在客户端请求静态文件时,Express.js 会自动查找这些文件并将其发送给客户端。

  • express.Router()
    允许你将路由处理器函数分组,并在应用程序中创建独立的路由器(router)模块。

2. app.xxx - 应用设置(共22个API)

需要特别学习的 API

  • app.set('views' | 'view engine', xxx)
    app.set('views', xxx) 用于指定视图模板文件存放的路径。例如:

    app.set('views', './views');
    

    app.set('view engine', xxx) 用于指定视图引擎的名称,例如:

    app.set('view engine', 'ejs');
    
  • app.get('env')

  • app.get('/xxx', fn) / app.post / app.put / app.delete ...

  • app.render()
    用于渲染视图模板并将其发送给客户端。这个方法需要一个渲染的视图名称和一个可选的数据对象作为参数,并返回一个包含渲染后 HTML 的字符串。

  • app.use()

3. request.xxx - 操作请求(共28个API)

需要特别学习的 API

  • req.get('ContentType')
    使用 req.get('Content-Type') 方法可以在处理 HTTP 请求时获取请求头。除了 Content-Type 请求头外,还有很多其他的请求头,如 User-AgentRefererAuthorization 等,都可以通过 req.get() 方法来获取其对应的值。
  • req.param('name')
    用于获取路由参数、GET 和 POST 请求参数。这个方法接受一个字符串类型的参数,表示要获取的参数的名称,它会根据请求中包含的参数来源来获取参数的值并返回。
    如果是在路由处理程序中获取路由参数,则可以直接在路由路径中定义参数名称并使用 req.params 对象获取,例如:
        app.get('/users/:id', (req, res) => {
          const userId = req.params.id;
          //...
        });
    
    如果要获取 GET 请求参数或 POST 请求参数,则可以使用 req.query 对象和 req.body 对象。req.query 对象用于获取 GET 请求中的查询字符串参数,例如 URL 中的 ?id=1&name=Tom 部分,而 req.body 对象用于获取 POST 请求的请求体参数。
    需要注意的是,使用 req.param() 方法来获取参数的值可能存在安全风险,因为它会搜索所有参数的来源,比较复杂且受到攻击的参数也可以被获取到。因此,为了安全起见,最好只获取已经确定的参数来源,例如使用 req.paramsreq.query 或 req.body 来获取参数的值。
  • req.range()
    用于处理请求的 Range 头部。Range 头部是用于指定客户端请求的资源范围的 HTTP 标头。范围可以通过一个或多个字节范围指定,例如 “0-499”、“500-999” 或 “1000-”。它通常用于支持文件断点续传或对大型数据进行分块传输等场景。

4. response.xxx - 操作响应(共24个API)

需要特别学习的 API

  • res.send() / res.sendFile()
  • res.render() / res.download()
  • res.headersSent()
    用于检查响应头是否已经发送到客户端。
    当调用 res.send()res.json()res.render() 等发送响应的函数时,Express 会根据响应类型设置不同的响应头并将响应发送到客户端。在这些函数被调用之后,如果使用 res.setHeader() 或者 res.header() 等函数修改响应头,则 Express 会抛出一个错误。因此,调用 res.headersSent() 可以用来检查响应头是否已经发送,从而避免意外修改已经发送的响应头。
  • res.status()
    用于设置响应的 HTTP 状态码。例如
    res.status(404).send('Not Found');
    
  • res.set() / res.get()
    用于设置和获取 HTTP 响应头信息。
  • res.format()
    用于根据请求头的 Accept 字段内容,动态的返回符合客户端要求的数据格式。

5. router.xxx - 操作路由(共5个API)

router 就是一个阉割版的 app