【Node】Express框架简单入门


基础与应用

什么是Express?

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

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

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

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

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

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

有很多流行框架基于 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("/about", (req, res) => {
   
  // console.log(`${req.method} ${req.url} ${Date.now()}`)
  logger(req);
  res.send("about");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Whoopsina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值