文档知识库教程开发工具【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址https://gitcode.com/jaywcjlove/reference点击查看免费下载Express 是用于 Node.js 的快速、不拘一格、极简主义的 Web 框架本篇文章以 jaywcjlove/reference 仓库中的 Express.js 备忘清单 为骨架完整覆盖 Hello World 起步、脚手架生成器、路由Router、应用Application、请求Request与响应Response对象以及中间件与视图模板等实战要点。读完本文你可以不查官方文档就能快速完成一个 Express 项目的搭建、路由拆分、中间件编排与模板渲染并理解每个核心 API 的适用场景。入门从零搭建第一个 Express 应用Hello WorldExpress 的极简主义体现在只需一个package.json、一个入口文件就能跑起一个 Web 服务。第一步创建项目并初始化配置$ mkdir myapp # 创建目录 $ cd myapp # 进入目录 $ npm init -y # 初始化一个配置npm init -y会生成一个默认的package.json关于其中各字段name、version、license、keywords等的详细约定可参考仓库中的 package.json 备忘清单。这也是 npm 备忘清单 中npm init系列命令的典型用法。第二步安装依赖$ npm install express # 安装依赖第三步编写入口文件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}示例应用) })这段代码完成了三件核心事通过express()创建应用实例用app.get()注册根路径GET路由用app.listen()监听 3000 端口并输出日志。第四步运行应用$ node index.js启动后访问http://localhost:3000/即可看到Hello World!。express 脚手架express -h命令与项目生成器除了手工搭建Express 还提供了命令行脚手架express其完整帮助信息如下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| 添加 hbs 引擎支持 | |--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| 强制在非空目录中生成 |创建一个使用 Pug 视图引擎的myapp项目$ express --viewpug myapp # 运行应用程序 $ DEBUGmyapp:* npm startDEBUGmyapp:*会开启该应用的调试日志输出便于观察路由注册与请求处理过程。注意脚手架生成的项目结构bin/www、routes/、views/等与手工npm init的最小结构不同前者适合快速获得一个约定俗成的工程骨架。顶层 APIexpress()与内置中间件express()是模块的顶层导出它是一个创建应用实例的函数同时挂载了一组内置中间件与工厂方法| 顶层成员 | 说明 | | :- | :- | |express.json()| 解析Content-Type为application/json的请求体结果挂到req.body| |express.raw()| 将请求体解析为原始Buffer| |express.Router()| 创建模块化的路由处理器实例 | |express.static()| 托管静态文件如public目录 | |express.text()| 将请求体解析为纯文本字符串 | |express.urlencoded()| 解析 URL 编码表单application/x-www-form-urlencoded的请求体 |其中express.json()与express.urlencoded()是处理 POST/PUT 请求体时必须挂载的内置中间件通常通过app.use()全局启用。Router模块化路由Router 是 Express 模块化路由的基础设施常用方法如下| 方法 | 说明 | | :- | :- | |router.all()| 匹配所有 HTTP 方法 | |router.METHOD()| 按 HTTP 方法匹配get、post、put、delete等 | |router.param()| 对路由参数执行预处理逻辑 | |router.route()| 链式定义同一路径的多个方法处理 | |router.use()| 挂载中间件或子路由 |为传递给此路由器的任何请求调用的中间件router.use(function (req, res, next) { // .. 这里有一些逻辑 .. 像任何其他中间件一样 next() })将处理任何以/events结尾的请求取决于路由器在哪里被use()router.get(/events, (req, res, next) { // .. })实际项目中通常把不同业务的路由拆到独立文件中导出 Router再由主应用app.use(/api, router)挂载从而保持入口文件精简。Application应用对象app对象承载应用级配置、中间件注册与路由分发。下面的例子演示了app.locals的读写var express require(express) var app express() console.dir(app.locals.title) // My App console.dir(app.locals.email) // memyapp.com属性| 属性 | 说明 | | :- | :- | |app.locals| 应用程序中的局部变量可在视图模板中直接访问 | |app.mountpath| 安装子应用程序的路径模式 |Events| 事件 | 说明 | | :- | :- | |mount| 子应用挂载到父应用上时在子应用上触发的事件 |当把一个大应用拆分为多个可复用的子应用时mount事件可用于在子应用挂载成功后执行初始化逻辑。方法| 方法 | 说明 | | :- | :- | |app.all()| 匹配所有 HTTP 方法的路由 | |app.delete()| 处理DELETE请求 | |app.disable()| 关闭某个布尔设置项 | |app.disabled()| 查询某个设置项是否关闭 | |app.enable()| 开启某个布尔设置项 | |app.enabled()| 查询某个设置项是否开启 | |app.engine()| 注册自定义模板引擎 | |app.get(name)| 读取应用设置项 | |app.get(path, callback)| 处理GET请求 | |app.listen()| 启动 HTTP 服务器 | |app.METHOD()| 处理指定 HTTP 方法POST、PUT、PATCH等 | |app.param()| 对路由参数执行预处理 | |app.path()| 返回应用的规范路径 | |app.post()| 处理POST请求 | |app.put()| 处理PUT请求 | |app.render()| 渲染视图模板字符串 | |app.route()| 返回单个路由实例支持链式定义 | |app.set()| 配置应用设置项 | |app.use()| 挂载中间件或子应用 |关键设置项示例app.set(trust proxy, ...)控制反向代理下req.ip的取值来源app.set(view engine, pug)声明默认模板引擎见下文“视图模板”一节。Request请求对象req对象表示 HTTP 请求包含查询字符串、参数、请求体、HTTP 标头等信息。属性| 属性 | 说明 | | :- | :- | |req.app| 当前请求所属的应用实例 | |req.baseUrl| 路由挂载的基准路径 | |req.body| 解析后的请求体需配合express.json()/express.urlencoded() | |req.cookies| 请求携带的 Cookie需配合cookie-parser | |req.fresh| 请求内容是否“新鲜”基于If-None-Match/If-Modified-Since判断 | |req.hostname| 请求的主机名 | |req.ip| 客户端 IP 地址 | |req.ips| 反向代理时的 IP 链 | |req.method| HTTP 方法 | |req.originalUrl| 原始请求 URL | |req.params| 路由参数 | |req.path| 请求路径部分 | |req.protocol| 请求协议http或https | |req.query| 查询字符串解析结果 | |req.route| 当前匹配到的路由信息 | |req.secure| 是否为 HTTPS 请求布尔值 | |req.signedCookies| 签名的 Cookie | |req.stale| 与req.fresh相反 | |req.subdomains| 子域名数组 | |req.xhr| 是否为 AJAX 请求基于X-Requested-With |方法| 方法 | 说明 | | :- | :- | |req.accepts()| 检查可接受的响应类型 | |req.acceptsCharsets()| 检查可接受的字符集 | |req.acceptsEncodings()| 检查可接受的编码 | |req.acceptsLanguages()| 检查可接受的语言 | |req.get()| 获取 HTTP 请求头字段 | |req.is()| 检查请求体类型 | |req.param()| 按名称获取路由参数或查询参数 | |req.range()| 解析Range头用于断点续传等场景 |典型用法示例app.get(/user/:id, (req, res) { res.send(user req.params.id) })Response响应对象res对象表示 Express 应用在收到 HTTP 请求后发送的 HTTP 响应。res.headersSent属性可判断响应头是否已经发出app.get(/, function (req, res) { console.dir(res.headersSent) // false res.send(OK) console.dir(res.headersSent) // true })属性| 属性 | 说明 | | :- | :- | |res.app| 当前响应所属的应用实例 | |res.headersSent| 响应头是否已发送 | |res.locals| 请求作用域内的局部变量可在模板渲染中使用 |方法| 方法 | 说明 | | :- | :- | |res.append()| 追加响应头字段 | |res.attachment()| 设置Content-Disposition: attachment提示下载 | |res.cookie()| 设置 Cookie | |res.clearCookie()| 清除 Cookie | |res.download()| 提示要下载的文件 | |res.end()| 结束响应过程 | |res.format()| 按Accept头协商响应内容类型 | |res.get()| 获取响应头字段 | |res.json()| 发送 JSON 响应 | |res.jsonp()| 发送带有 JSONP 支持的响应 | |res.links()| 设置Link响应头 | |res.location()| 设置Location响应头 | |res.redirect()| 重定向请求 | |res.render()| 渲染视图模板 | |res.send()| 发送各种类型的响应 | |res.sendFile()| 将文件作为八位字节流发送 | |res.sendStatus()| 发送状态码并附带对应的状态消息 | |res.set()| 设置响应头字段 | |res.status()| 设置 HTTP 状态码 | |res.type()| 设置Content-Type| |res.vary()| 设置Vary响应头 |res.end()结束响应过程res.end() res.status(404).end()res.end()结束响应过程。这个方法其实来自 Node 核心具体是http.ServerResponse的response.end()方法。它不携带响应体适合在已通过其他手段如res.write()写入内容后收尾。res.json([body])发送 JSON 响应res.json(null) res.json({ user: tobi }) res.status(500).json({ error: message })res.json()会把对象序列化为 JSON 并自动设置Content-Type: application/json是构建 REST API 时最常用的响应方法。路由示例GET 与 POST最基本的 GET 路由——向主页发出 GET 请求时响应hello worldconst 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) })app.METHOD()的语义是“按 HTTP 方法分发到对应处理函数”这是 Express 路由体系的基本单元配合app.route()还能对同一路径链式定义多个方法。app.all匹配所有方法app.all(/secret, function (req, res, next) { console.log(访问秘密部分...) next() // 将控制权传递给下一个处理程序 })app.all()不区分 HTTP 方法常用于拦截日志、权限校验等“对所有请求生效”的前置逻辑。app.delete处理 DELETE 请求app.delete(/, function (req, res) { res.send(DELETE request to homepage) })app.disable / app.disabled开关设置项app.disable(trust proxy) app.get(trust proxy) // falseapp.disabled(trust proxy) // true app.enable(trust proxy) app.disabled(trust proxy) // falseapp.set(name, value)/app.get(name)读写设置项app.enable()/app.disable()则是布尔设置项的快捷写法app.enabled()/app.disabled()用于查询其状态。app.engine注册自定义模板引擎var engines require(consolidate) app.engine(haml, engines.haml) app.engine(html, engines.hogan)app.engine(ext, callback)可以把任意扩展名映射到模板引擎。示例中使用了consolidate统一封装各模板引擎注册后index.haml就会交给engines.haml渲染。仓库中也有对应的 Ejs 备忘清单 可参考。app.listen启动服务var express require(express) var app express() app.listen(3000)app.listen([port[, host[, backlog]]][, callback])最终会创建并启动 Node 的 HTTP 服务器等价于http.createServer(app).listen(...)回调在服务器开始监听后触发。中间件示例请求日志中间件是 Express 的核心设计处理函数依次执行通过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) } )这里把两个中间件组成数组log作为路由的处理链先记录req.originalUrl再记录req.method最后进入真正的业务处理函数发送响应。这就是 Express“中间件栈”的典型形态——每个中间件既可以修改req/res也可以提前结束响应或者通过next()继续传递。视图模板使用 Pug 渲染页面声明默认视图引擎app.set(view engine, pug)在views目录下创建一个名为index.pug的 Pug 模板文件内容如下html head title title body h1 message创建一个路由来渲染index.pug文件。如果未设置视图引擎属性则必须指定视图文件的扩展名app.get(/, (req, res) { res.render(index, { title: Hey, message: Hello there! }) })res.render(view, locals)会结合app.locals、res.locals与传入的局部数据渲染模板模板中title、message即来自这里传入的对象。若使用脚手架express --viewpug myapp生成项目则会自动配置好视图目录、默认引擎与示例模板。关联速查表与扩展阅读在 jaywcjlove/reference 仓库中Express.js 备忘清单位于 docs/expressjs.md归属于 README 的Nodejs分类README.md。与本主题强相关的配套速查表还包括npm 备忘清单npm init、npm install及各参数-D、-E、-B等的完整说明覆盖本文安装依赖时的各种场景package.json 备忘清单name、version、license等字段规则理解脚手架生成的工程配置Ejs 备忘清单EJS 模板语法与 CLI 用法可作为app.engine注册的模板引擎参考。如需深入每个 API 的完整语义与边界行为可以基于本文的方法清单在 Express 应用内结合实际请求逐一验证例如通过res.headersSent观察响应时机、通过req.params与req.query验证参数解析。赞分享文档知识库教程开发工具【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址https://gitcode.com/jaywcjlove/reference点击查看免费下载相关推荐jaywcjlove/reference的快速参考指南jaywcjlove/reference的快速参考指南 还在为查找技术命令和语法而烦恼吗还在各个文档网站之间来回切换吗本文将为你全面解析 jaywcjlov文档知识库教程开发工具jaywcjlove/reference的技术栈速查表开发者必备的全面参考指南jaywcjlove/reference的技术栈速查表开发者必备的全面参考指南 痛点技术栈繁杂记忆成本高 你是否曾经在开发过程中遇到过这样的困境突然忘记文档知识库教程开发工具Jest 备忘清单JavaScript 测试框架入门与 API 索引reference 速查指南Jest 备忘清单JavaScript 测试框架入门与 API 索引reference 速查指南 Jest 是一款开箱即用、零配置的 JavaScript文档教程上一篇探索人类行为的超级AIMaia Chess项目深度解析下一篇ProcessHacker与蜜罐技术结合诱捕恶意软件的监控策略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
HelloGitHub第125期:开源项目导航与新手实操指南 1. HelloGitHub 是什么?先搞懂这份“开源导览”的真实定位打开《HelloGitHub》第 125 期之前,我想先和还没入门的读者说清楚一件事:它并不是一个需要你去“学习”的课程,也不是一份冷冰冰的项目列表。它本质上是一份“开源世界的月… · 2026/9/23 12:23:33
国内英文性能优化实战:3步打造速查手册,告别文档翻找 国内英文性能优化实战:3步打造速查手册,告别文档翻找 写代码时最痛苦的不是写不出,而是找资料太慢。官方文档太长抓不住重点,每次遇到国内英文相关的配置或接口,都要在冗长的页面里来回滚动。我花了一周时间,把分散在各处的关键点整理成一份… · 2026/9/23 12:23:27
从《超级骇客2》看AI与虚拟现实:技术边界与实操指南 1. 从《超级骇客2》看AI与虚拟现实的终极命题《超级骇客2》这部片子,我前前后后刷了三遍。第一遍看热闹,第二遍看设定,第三遍开始琢磨它背后的技术隐喻。作为一部经典科幻电影的续作,它把“虚拟与现实边界消融”这个老话题拍出了新… · 2026/9/23 12:23:27
迪恩温彻斯特底层逻辑拆解 面试必问的性能优化实战 迪恩温彻斯特底层逻辑拆解 面试必问的性能优化实战 配置环境就卡半天,这种体验太折磨人了。刚打开终端,依赖安装进度条卡在99%,或者编译报错一堆看不懂的代码,新手直接劝退。但这正是 面试必问… · 2026/9/23 13:01:28
苹果开发者速查手册:应届生避坑指南与实战入门 苹果开发者速查手册:应届生避坑指南与实战入门 刚拿到offer,或者正在准备校招的应届生,你是不是也陷入过这种死循环:Apple Developer 文档看了三遍,Swift… · 2026/9/23 13:01:22
多能源微网双层调度模型:多时间尺度滚动优化与MATLAB实现 简介:本资源面向能源系统优化方向的研究生、科研人员与微网调度工程师,提供一套基于MATLAB的多时间尺度滚动优化多能源微网双层调度模型,可用于复现相关论文、开展课题仿真或作为教学案例。压缩包共85个文件,以48个m脚本与36个mat… · 2026/9/23 13:01:22
Caffe+C++实现AlphaZero:高性能自对弈与MCTS落地指南 简介:这份资源是用 Caffe 与 C 复现 DeepMind AlphaZero 算法的工程实现,面向具备一定深度学习与 C 基础、希望深入理解强化学习自对弈机制的开发者与研究者。核心算法采用模板化设计,与具体游戏规则分离,理论上可迁移到围棋、国际… · 2026/9/23 13:01:22
增广矩阵束二维DOA估计:原理、Python实现与配对避坑指南 简介:这份资源面向信号处理、无线通信、雷达与声学成像方向的学习者和研究人员,聚焦二维DOA估计这一经典课题,提供基于增广矩阵束方法的MATLAB实现范例,帮助读者理解如何在L型阵列下同时估计水平与垂直方向的来波角度。压缩包共2个… · 2026/9/23 13:01:22
华安证券通达信版下载实战:3步手写实现自动化脚本 华安证券通达信版下载实战:3步手写实现自动化脚本 面试被问“怎么把数据从本地通达信导出到数据库”时,你能答上原理吗?别慌,今天带你用 Python 手写实现… · 2026/9/23 13:01:15
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29