拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Express.js 完整速查指南:Hello World、路由、中间件与四大核心 API 全解析(Quick Reference 开源速查清单)

Express.js 完整速查指南Hello World、路由、中间件与四大核心 API 全解析Quick Reference 开源速查清单【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/referenceExpress 是 Node.js 生态中最流行的 Web 框架之一以快速、不拘一格、极简主义Fast, unopinionated, minimalist著称。本文以 Quick Reference 仓库中的 Express 备忘清单 为骨架系统梳理从零搭建 Express 应用、express 命令行脚手架、路由与中间件、模板渲染的完整实操流程并逐项展开express()、Application、Request、Response、Router四大核心 API 的属性与方法参考。读完本文你将掌握一套可直接复制运行的全量 Express 4.x 速查手册在开发中随时检索、即查即用。本文内容与仓库 Nodejs 分类下的其他速查清单如 npm、package.json、PM2配套使用可构成完整的 Node.js 服务端开发工具箱。一、Express.js 简介与定位Express 是用于 Node.js 的 Web 应用框架官方定位是快速Fast基于 Node.js 原生http模块之上以极小的开销提供路由、中间件等 Web 开发必需能力不拘一格Unopinionated不强约束项目结构、模板引擎与中间件选型开发者可自由组合极简主义Minimalist核心只保留最必要的功能其余能力通过中间件生态按需扩展。这份速查清单以 Express 4.x 的 API 为参考基准覆盖了express()顶层函数、Application应用、Request请求、Response响应、Router路由四类对象的全部常用属性和方法并配有可复制运行的代码示例。二、快速起步Hello WorldExpress 的入门路径非常短只需四个步骤即可跑起第一个应用。1. 创建项目并初始化$ mkdir myapp # 创建目录 $ cd myapp # 进入目录 $ npm init -y # 初始化一个配置npm init -y会基于当前目录自动生成一份默认的package.json配置具体字段含义可查阅仓库中的 package.json 速查清单。2. 安装依赖$ npm install express # 安装依赖安装完成后express会被写入package.json的dependenciesnpm 相关用法可参考 npm 速查清单。3. 编写入口文件index.jsconst express require(express) const app express() const port 3000 app.get(/, (req, res) { res.send(Hello World!) }) app.listen(port, () { console.log(监听端口${port}示例应用) })这段代码做了三件事require(express)引入框架调用express()创建应用实例appapp.get(/)注册一条针对主页GET /的路由回调中通过res.send()返回字符串响应app.listen(port)让应用监听 3000 端口并在启动成功后输出日志。4. 运行应用$ node index.js启动后访问http://localhost:3000浏览器即可看到 Hello World!。app.listen()底层封装了 Node 的http.createServer()可接受[port[, host[, backlog]]][, callback]形式的参数具体见后文Application 方法一节。三、express 命令行脚手架express-generator除了手工搭建Express 还提供了命令行生成器用一条命令即可生成带完整目录结构、视图引擎和启动脚本的项目骨架。运行express -h可查看全部可用选项Usage: express [options] [dir] Options: -h, --help 输出使用信息 --version 输出版本号 -e, --ejs 添加 ejs 引擎支持 --hbs 添加 hbs 引擎支持 --pug 添加 pug 引擎支持 -H, --hogan 添加 hogan.js 引擎支持 --no-view 无视图引擎生成 -v, --view engine 添加视图 engine 支持 (ejs|hbs|hjs|jade|pug|twig|vash) (默认jade) -c, --css engine 添加样式表 engine 支持 (less|stylus|compass|sass) (默认css) --git 添加 .gitignore -f, --force 强制非空目录选项说明选项作用可选值-h, --help输出使用信息---version输出版本号--e, --ejs添加 EJS 模板引擎支持---hbs添加 Handlebarshbs模板引擎支持---pug添加 Pug 模板引擎支持--H, --hogan添加 hogan.js 模板引擎支持---no-view不生成视图引擎相关文件--v, --view engine指定视图引擎ejs、hbs、hjs、jade、pug、twig、vash默认jade-c, --css engine指定样式表预处理器less、stylus、compass、sass默认css--git额外生成.gitignore文件--f, --force目标目录非空时强制生成-说明选项列表中的jade是 Express 4.x 早期的默认视图引擎后更名为pug生成器会保留该历史兼容选项实际新项目建议优先选用pug或ejs。创建并运行一个 Pug 项目$ express --viewpug myapp # 运行应用程序 $ DEBUGmyapp:* npm startexpress --viewpug myapp会生成一个名为myapp的完整项目包含bin/www启动脚本、routes/路由目录、views/模板目录、public/静态资源目录以及app.js应用主文件。随后用DEBUGmyapp:* npm start启动——DEBUG环境变量开启调试日志npm start执行package.json中预置的启动脚本。若希望生成纯净的不带视图引擎的项目可改用express --no-view myapp。四、express() 顶层 APIexpress()是框架的入口函数调用后返回一个应用实例。模块上还挂载了一系列内置中间件工厂函数顶层方法用途express.json()内置 JSON 请求体解析中间件express.raw()将请求体解析为原始Bufferexpress.Router()创建新的路由器对象express.static()托管静态文件的内置中间件express.text()将请求体解析为纯文本字符串express.urlencoded()解析application/x-www-form-urlencoded格式的请求体其中express.json()与express.urlencoded()是现代 Express 应用读取req.body的前置条件express.static()通常配合app.use()将public目录暴露为静态资源express.Router()则是拆分路由模块的核心工具详见下文Router 路由一节。五、Application应用对象app对象是 Express 应用的主体承载配置、监听、路由注册与中间件编排等职责。基础用法var express require(express) var app express() console.dir(app.locals.title) // My App console.dir(app.locals.email) // memyapp.comapp.locals中预置的值来自项目配置默认模板中的示例值其内容是应用级局部变量可在渲染模板时直接访问。属性属性说明app.locals应用程序中的局部变量贯穿整个应用生命周期app.mountpath安装挂载子应用程序时的路径模式事件Events事件说明mount子应用被挂载到父应用上时在子应用上触发mount事件在应用嵌套场景中非常有用当你把一个小型 Express 应用app.use(/api, subApp)挂到父应用下时subApp上会触发mount事件可通过app.mountpath得知自己被挂载的路径。方法方法用途app.all()匹配指定路径上的所有 HTTP 方法app.delete()注册 DELETE 方法路由app.disable(name)将布尔配置项name设为falseapp.disabled(name)查询布尔配置项name是否为falseapp.enable(name)将布尔配置项name设为trueapp.enabled(name)查询布尔配置项name是否为trueapp.engine(ext, callback)注册指定扩展名的模板引擎app.get(name)读取配置项的值app.get(path, callback)注册 GET 方法路由app.listen()监听端口并启动 HTTP 服务app.METHOD()注册指定 HTTP 方法GET/POST/PUT/DELETE 等的路由app.param()为路由参数注册回调app.path()返回应用的规范路径app.post()注册 POST 方法路由app.put()注册 PUT 方法路由app.render()渲染视图模板并返回 HTML 字符串app.route()返回可在同一路径上链式注册多种方法的 Route 实例app.set(name, value)设置配置项的值app.use()注册中间件或挂载子应用app.all —— 匹配所有方法app.all(/secret, function (req, res, next) { console.log(访问秘密部分...) next() // 将控制权传递给下一个处理程序 })app.all()不区分 HTTP 方法常用于在特定路径上执行统一的鉴权、日志等预处理逻辑next()将控制权交给链上的下一个中间件或路由处理器。app.delete —— DELETE 方法路由app.delete(/, function (req, res) { res.send(DELETE request to homepage) })app.disable(name) 与 app.enable(name)app.disable(trust proxy) app.get(trust proxy) // falseapp.disable(trust proxy)会把trust proxy配置置为false随后app.get(trust proxy)读取到的值即为false。app.disabled(name) 与 app.enabled(name)app.disabled(trust proxy) // true app.enable(trust proxy) app.disabled(trust proxy) // falsedisabled()/enabled()是只读查询方法与disable()/enable()配合完成布尔配置项的开合与检查。app.engine(ext, callback) —— 注册模板引擎var engines require(consolidate) app.engine(haml, engines.haml) app.engine(html, engines.hogan)通过app.engine()可以将任意模板引擎如 Haml、Hogan绑定到指定扩展名上consolidate是一个模板引擎适配器库统一了多种引擎的渲染接口。这样即便视图文件扩展名不是框架默认识别的类型也能被正确渲染。app.listen([port[, host[, backlog]]][, callback])var express require(express) var app express() app.listen(3000)app.listen()与http.createServer(app).listen()等价port指定端口、host指定绑定地址、backlog指定等待连接队列长度全部省略时监听随机端口传入callback则会在服务启动成功后执行。六、Request请求对象req对象表示进入应用的 HTTP 请求承载请求查询字符串、路径参数、请求体、HTTP 标头等全部请求信息。app.get(/user/:id, (req, res) { res.send(user req.params.id) })请求GET /user/123时req.params.id即为123res.send()返回user 123。属性属性说明req.app当前应用实例的引用req.baseUrl路由器挂载的 URL 路径req.body请求体解析后的内容需配合express.json()/express.urlencoded()req.cookies请求携带的 Cookie需 cookie-parser 中间件req.fresh请求是否新鲜与Cache-Control相关取反即req.stalereq.hostname请求的 Host 头中的主机名req.ip请求的远程 IP 地址req.ips开启trust proxy时X-Forwarded-For 中的 IP 数组req.method请求的 HTTP 方法如GET、POSTreq.originalUrl原始请求 URL含查询字符串req.params命名路由参数对象req.path请求路径部分不含查询字符串req.protocol请求协议http或httpsreq.query解析后的查询字符串对象req.route当前匹配到的路由信息req.secure请求是否通过 TLS 连接等价于req.protocol httpsreq.signedCookies签名后的 Cookie需 cookie-parser 中间件req.stale请求是否陈旧req.fresh的取反req.subdomains主机名中的子域数组req.xhr请求是否为 AJAX 请求依据X-Requested-With头判断方法方法说明req.accepts(types)检查请求Accept头是否接受指定类型req.acceptsCharsets(charsets)检查可接受的字符集req.acceptsEncodings(encodings)检查可接受的内容编码req.acceptsLanguages(langs)检查可接受的语言req.get(field)获取 HTTP 请求头字段的值req.is(type)检查请求Content-Type是否为指定类型req.param(name)按优先级从路由参数、请求体、查询字符串中取值req.range(size)解析Range头并返回字节范围数组其中req.get()是读取请求头的标准方式例如req.get(Content-Type)req.is(application/json)常用于判断请求体类型以决定解析策略。七、Response响应对象res对象表示 Express 应用在收到 HTTP 请求后要发送的 HTTP 响应负责设置状态码、响应头与响应体。app.get(/, function (req, res) { console.dir(res.headersSent) // false res.send(OK) console.dir(res.headersSent) // true })res.headersSent在发送响应前为falseres.send(OK)之后立即变为true可用于判断响应头是否已经发出。属性属性说明res.app当前应用实例的引用res.headersSent响应头是否已经发送res.locals仅在当前请求周期内有效的局部变量渲染模板时可用方法方法说明res.append(field, value)追加响应头字段res.attachment([filename])将响应标记为附件设置Content-Disposition可触发下载res.cookie(name, value[, options])在响应中设置 Cookieres.clearCookie(name[, options])清除指定 Cookieres.download(path[, filename])提示要下载的文件res.end([data][, encoding])结束响应过程res.format(obj)根据请求Accept头协商响应格式res.get(field)获取已设置的响应头字段res.json([body])发送 JSON 响应res.jsonp([body])发送带有 JSONP 支持的响应res.links(links)拼接并设置Link响应头res.location(path)设置Location响应头res.redirect([status,] path)重定向请求res.render(view[, locals][, callback])渲染视图模板res.send([body])发送各种类型的响应自动设置 Content-Typeres.sendFile(path)将文件作为八位字节流发送res.sendStatus(statusCode)发送 HTTP 状态码并附带对应的状态消息res.set(field, value)设置响应头字段res.status(code)设置响应状态码链式调用起点res.type(type)设置Content-Type响应头res.vary(field)设置Vary响应头res.end() —— 结束响应res.end() res.status(404).end()结束响应过程。这个方法其实来自 Node 核心具体是http.ServerResponse的response.end()方法因此不发送任何响应体通常用于无内容的 304、404 等场景。res.json([body]) —— 发送 JSONres.json(null) res.json({ user: tobi }) res.status(500).json({ error: message })res.json()会把对象序列化为 JSON 字符串并设置Content-Type: application/json后发送与res.status()链式组合可同时指定状态码与 JSON 响应体。八、Router路由器Router是 Express 4.x 引入的模块化路由机制通过express.Router()创建独立的路由实例再挂载到应用或其他路由上实现路由的按模块拆分。常用方法方法说明router.all()匹配指定路径上的所有 HTTP 方法router.METHOD()注册指定 HTTP 方法的路由router.param()为路由参数注册回调router.route()返回可在同一路径上链式注册多种方法的 Route 实例router.use()为路由器注册中间件中间件为传递给此路由器的任何请求调用router.use(function (req, res, next) { // .. 这里有一些逻辑 .. 像任何其他中间件一样 next() })router.use()注册的中间件会拦截所有进入该路由器的请求在路由处理前统一执行逻辑最后必须调用next()放行。子路由将处理任何以/events结尾的请求// 取决于路由器在哪里 use() router.get(/events, (req, res, next) { // .. })// 在主应用中挂载 app.use(/api, router)将路由器挂载到/api下之后GET /api/events就会命中上面的router.get(/events, ...)——路由的实际生效路径由挂载位置决定这也是router.use()的注释所强调的取决于路由器在哪里 use()。九、路由定义实战路由决定应用如何响应客户端对特定端点URI HTTP 方法的请求。基础路由const express require(express) const app express() // 向主页发出 GET 请求时响应“hello world” app.get(/, (req, res) { res.send(hello world) })按 HTTP 方法区分// GET 方法路由 app.get(/, (req, res) { res.send(GET request to the homepage) }) // POST 方法路由 app.post(/, (req, res) { res.send(POST request to the homepage) })同一路径可以根据 HTTP 方法注册不同的处理器app.METHOD()中的METHOD支持get、post、put、delete、patch、options、head等全部标准方法再加上app.all()与app.use()即可覆盖绝大多数路由场景。十、中间件中间件是 Express 的核心设计每个中间件是一个接收(req, res, next)的函数按注册顺序组成处理链通过next()决定是否放行。function logOriginalUrl (req, res, next) { console.log(ReqURL:, req.originalUrl) next() } function logMethod (req, res, next) { console.log(Request Type:, req.method) next() } const log [logOriginalUrl, logMethod] app.get(/user/:id, log, (req, res, next){ res.send(User Info) } )这段代码演示了中间件的三种典型用法单个中间件logOriginalUrl打印请求原始 URL 后调用next()中间件数组log数组将logOriginalUrl与logMethod打包请求会按数组顺序依次执行路由级中间件app.get(/user/:id, log, handler)把中间件夹在路径与最终处理器之间实现先记录日志、再响应业务的链路编排。中间件可以用于日志、鉴权、请求体解析、错误处理等几乎所有横切关注点是 Express 生态扩展能力的基石。十一、使用模板引擎渲染视图Express 支持多种模板引擎这里以 Pug原 Jade为例演示完整流程。1. 设置视图引擎app.set(view engine, pug)app.set(view engine, pug)声明默认视图引擎为 Pug同时 Express 默认在项目views目录下查找模板文件也可通过app.set(views, 路径)自定义模板目录。2. 创建模板文件在views目录下创建一个名为index.pug的 Pug 模板文件内容如下html head title title body h1 messagetitle title与h1 message中的右侧变量来自渲染时传入的数据对象。3. 创建路由渲染模板创建一个路由来渲染index.pug文件。如果未设置视图引擎属性则必须指定视图文件的扩展名。app.get(/, (req, res) { res.render(index, { title: Hey, message: Hello there! }) })访问/时res.render(index, {...})会将数据对象{ title: Hey, message: Hello there! }注入模板并渲染出完整 HTML 返回给客户端。若没有通过app.set(view engine, ...)设置默认引擎则需要显式写成res.render(index.pug, ...)以指明扩展名。十二、相关速查清单Express 通常与其他 Node.js 工具链配合使用本仓库还提供了以下配套速查清单可组合查阅npm 包管理 与 package.json 配置项目初始化与依赖管理PM2 进程守护生产环境的进程管理与负载均衡Ejs 模板引擎与 Pug 并列的主流视图引擎Koa.js同属 Node.js 生态的另一款 Web 框架便于横向对比Yarn、pnpm、Bun可替代 npm 的包管理器与运行时Jest为 Express 应用编写单元与集成测试结语本文以 Quick Reference 仓库的 Express 备忘清单 为蓝本覆盖了从 Hello World 起步、express 脚手架生成到express()、Application、Request、Response、Router的完整 API 参考以及路由、中间件、模板渲染的实战示例。无论是快速起一个演示服务还是系统梳理 Express 4.x 的 API 面这份速查指南都可以作为日常开发中的随身参考。建议在实际项目中配合上述配套清单查阅并以上手实验的方式验证每个 API 的行为。【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门