ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Express 快速上手指南:6 步跑通一个完整 Web 服务(附官方示例代码)

Express 快速上手指南:6 步跑通一个完整 Web 服务(附官方示例代码) Express 快速上手指南6 步跑通一个完整 Web 服务附官方示例代码【免费下载链接】expressFast, unopinionated, minimalist web framework for node.项目地址: https://gitcode.com/GitHub_Trending/ex/express如果任务是先把几个接口跑起来看看效果最快的选择就是 Express——Node.js 生态里最主流的精简型 Web 框架路由、中间件、模板渲染它都管但不会替你做架构上的决定。这篇文章基于 express 仓库的官方示例代码带你从一条 Hello World 路由开始一步步搭出一个能处理参数、发静态资源、渲染页面、还能兜底报错的服务。 先把服务跑起来先克隆仓库examples/hello-world/里的代码是全篇最短的完整应用也是理解 Express 最小单元的入口官方示例examples/hello-world/git clone https://gitcode.com/GitHub_Trending/ex/expressvar express require(express); var app express(); app.get(/, function (req, res) { res.send(Hello World); }); app.listen(3000, function () { console.log(服务已启动端口 3000); });node index.js后浏览器打开http://localhost:3000页面出现Hello World就说明四个核心动作全部生效了引入框架、创建实例、注册路由、监听端口。后面每一步都是在给这个骨架加能力。把 URL 参数接进处理函数接口不可能全是固定的——你要按用户 ID 查详情、按页码取列表动态部分就得从 URL 里拿出来。官方示例examples/params/ 展示了app.param的用法它能在路由函数执行前预处理指定参数// 把 :from / :to 转成整数转换失败就抛错 app.param([from, to], function (req, res, next, value, name) { req.params[name] parseInt(value, 10); next(isNaN(req.params[name]) ? new Error(参数不合法: value) : undefined); }); app.get(/users/:from-:to, function (req, res) { res.send(users names.slice(req.params.from, req.params.to 1).join(, )); });注意参数校验失败时走next(err)而不是在路由里写 if-else这样脏数据的处理统一交给后面的错误中间件路由函数只负责正常流程。挂上请求日志与静态资源服务服务一跑起来你就会想请求到底进来没有返回了什么状态码而前端的 HTML、CSS、JS 也不该每次手动复制。日志用 morgan 一行解决静态文件用express.static交给框架var logger require(morgan); app.use(logger(dev)); // 每个请求打一行日志 app.use(express.static(path.join(__dirname, public))); // 想给地址加 /static 前缀就把路径作为第一个参数挂载 app.use(/static, express.static(path.join(__dirname, public)));这两个中间件的顺序很关键use不带路径就全局生效带路径就只拦截对应前缀的请求——express.static会按req.path在 public 目录下找文件找不到就放行给后面的路由。用模板引擎渲染动态页面页面内容随数据变化时别再手写字符串拼 HTML。Express 本身不带模板引擎但res.render能对接 EJS、HBS 等任何引擎注册一下就能用app.set(view engine, ejs); // 设置后渲染时不用再写文件扩展名 app.set(views, path.join(__dirname, views)); app.get(/users, function (req, res) { res.render(users, { users: [{ name: tobi }, { name: loki }], title: 用户列表 }); });res.render(users)会在 views 目录下找users.ejs第二个参数里的变量可以直接在模板里用% user.name %插值。模板文件里的静态片段页头页脚还能拆成单独文件复用避免每个页面重复贴。给接口加上错误处理与 404 兜底接口上线后一定会遇到两种情况中间件里抛了错或者请求打到了不存在的地址。这时候你不能把堆栈信息直接甩给用户error-pages 官方示例就是专门演示这两件事的// 4 个参数的中间件会被 Express 识别为错误处理器 app.use(function (err, req, res, next) { res.status(err.status || 500); res.render(500, { error: err }); }); // 放在所有路由之后前面的中间件都没响应时就当作 404 app.use(function (req, res) { res.status(404).render(404); });两个细节容易踩坑错误处理中间件必须是 4 参数签名普通中间件遇到错误会自动跳过它404 中间件必须排在所有业务路由之后否则会把正常的请求也吞掉。工程化项目目录布局与生产配置当index.js超过两百行就该把代码拆开组织了。MVC 官方示例examples/mvc/ 的布局可以直接抄作业mvc/ ├── controllers/ # 请求逻辑按资源拆分user/ pet/ main/ ├── views/ # 模板文件含 404/5xx 兜底页 ├── public/ # 静态资源 ├── lib/boot.js # 统一注册各控制器 └── index.js # 入口配置、中间件、错误处理配套的生产环境检查清单按版本拆路由app.use(/api/v1, require(./controllers/api_v1))每个 API 版本一个 router 模块互相不干扰区分运行环境用NODE_ENVproduction关闭详细错误输出错误页只给用户一句话堆栈写进日志中间件顺序固定全局中间件日志、body 解析在最前业务路由居中404 与错误处理器永远收尾Express 的卖点从来不是功能多而是不拦你的路——它把拼装权交给你框架本身保持极小。等项目超出单个 index.js 的规模后最省力的学法是翻仓库的官方示例目录examples/里面按场景放着会话、Cookie、下载、多路由等几十个可直接运行的完整样例照着源码读比看文档快得多。【免费下载链接】expressFast, unopinionated, minimalist web framework for node.项目地址: https://gitcode.com/GitHub_Trending/ex/express创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表