Node.js | express 框架开篇

时间:2022-09-26 13:09:02

CSDN话题挑战赛第2期
参赛话题:学习笔记

Node.js | express 框架开篇



???? 前言

NodeJS的基础内容已经完结,现在开始要步入框架的学习了,本篇文章将初步去探索express这个框架,让我们开始吧!

1️⃣ express介绍

Express是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。

  • Web 应用程序
    Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。
  • API
    使用您所选择的各种 HTTP 实用工具和中间件,快速方便地创建强大的 API
  • 性能
    Express 提供精简的基本 Web 应用程序功能,而不会隐藏您了解和青睐的 Node.js 功能。
  • 框架
    许多 流行的开发框架 都基于 Express 构建。

2️⃣ 初步上手

安装:npm i express

express为我们提供的最强大的能力就是一套超级简单且强大的路由系统,我们先看一下使用原生NodeJS开发服务器的代码:

const http = require("http");

const server = http.createServer();

server.on("request", (req, res) => {
    // req:接受浏览器传的参数,request对象
    // res:返回渲染的内容,response对象
    // 路由匹配
    switch (req.url) {
        case "/":
            res.end(
                JSON.stringify({
                    name: "ailjx",
                    age: 18,
                })
            );
            break;

        default:
            res.end("404");
            break;
    }
});

server.listen(3000, () => {
    console.log("服务器启动成功!");
});

上面我们使用原生NodeJS开发了一个简单的后端服务器,可以想象到,使用原生NodeJS开发最麻烦的问题就是对路由的处理了

  • 需要手动使用分支去匹配用户请求的路由
  • 在返回数据时需要自己手动转换数据格式
  • 对于一些网络请求,如GETPOST请求等,需要我们针对不同的请求去做不同的适配
  • 开发出的API代码结构不够清晰,相对繁琐

了解了原生开发的问题所在,我们现在尝试使用express去搭建一个与上面一样的服务器:

// 引入express
const express = require("express");

const app = express();

// 注册路由(get请求)
app.get("/", (req, res) => {
    // req:接受浏览器传的参数,request对象
    // res:返回渲染的内容,response对象
    res.end(
        JSON.stringify({
            name: "ailjx",
            age: 18,
        })
    );
});

// 注册全局中间件,上面的路由都没有匹配时会进入到这里
app.use((req, res) => {
    res.end("404");
});

app.listen(3000, () => {
    console.log("服务器启动成功!");
});

我们使用express时能直接根据路由—>处理函数的方式去注册一个个路由,express路由处理函数中的reqres参数完全兼容原生NodeJSreqres参数,并且在其基础上还添加了额外的方法

app.get("/", (req, res) => {
    // express中的req和res完全与原生的兼容,原生的write和end等方法都能使用
    res.write("hello world");
    res.end();
});

res.sendexpress中新添加的方法,send方法很聪明,它会自动识别/转换数据的格式从而自动设置响应头,不需要我们手动调用res.writeHead设置响应头:

app.get("/", (req, res) => {
    // express中的req和res完全与原生的兼容,并在原生的基础上添加了格外的属性
    res.send("hello world");
});
app.get("/", (req, res) => {
    // express中的req和res完全与原生的兼容,并在原生的基础上添加了格外的属性
    // 1. 直接传递数据,send会自动JSON化我们的数据
    res.send({
         name: "ailjx",
         age: 18,
     });
    // res.send([1, 2, 3]);
});
app.get("/", (req, res) => {
    // 2. 直接传递HTML文档,send会自动帮我们处理响应头和编码格式
    res.send(`<h1>你好呀!</h1>`);
});

express路由的另一个强大之处在于它可以设置模糊匹配

// 匹配 acd 和 abcd
app.get('/ab?cd', function(req, res) {
  res.send('ab?cd');
});

// 匹配 /ab/******
app.get('/ab/:id', function(req, res) {
  res.send('aaaaaaa');
});
// 等等...

还可以设置请求类型:

app.post("/login", (req, res) => {
    res.send("登录成功!");
});
app.delete("/login", (req, res) => {
    res.send("删除成功!");
});
app.put("/login", (req, res) => {
    res.send("修改成功!");
});

上面简单介绍了express的部分特性,关于express的更多更详细的内容博主会持续更新

从上面的几个例子你应该就能看到express路由的优势所在,在express中还有一个非常重要的概念:中间件

3️⃣ 中间件

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

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

function (req, res, next) {
  // 三个参数:req, res, next
  console.log('我是一个中间件')
  next()
}

中间件的功能包括:

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

如果当前中间件没有终结请求-响应循环,则必须调用 next() 方法将控制权交给下一个中间件,否则请求就会挂起。

上面我们在app上挂载的路由处理函数就类似于中间件,关于express中间件的更多内容我会在之后的文章里详细讲解,敬请期待!

???? 结语

本篇在原生Node开发的问题上引入了express这个框架,并简单对express的使用进行了讲解,博主的Node.js从入门到精通专栏正在持续更新中,关注博主订阅专栏学习Node不迷路!

如果本篇文章对你有所帮助,还请客官一件四连!❤️

Node.js | express 框架开篇