当前位置: 首页 > news >正文

第3章 Express与Morgan简介

第1章:ExpressMorgan简介

使用http模块,你已经创建了一个能够接收HTTP请求的服务器。但从路由实现中可以看出,使用Node.js构建Web应用既冗长又复杂。

为简化构建Web应用的过程,你可以使用一个名为Express的框架。

Express是一个Node.js Web框架,因其简单性和简约特性而广受欢迎。该框架基于httpNode.js模块构建。通过使用Express,你可以访问加速开发过程的函数和模块。下面我举个例子。

使用Express

要开始使用Express,你需要使用npm安装该包,具体如下:

npm install express

包安装完成后,打开index.js文件,并用以下代码替换你之前创建的http服务器:

const express = require('express');

const app = express();

app.get('/', (req, res) => {

res.send('Hello From Node.js');

});

app.get('/contact', (req, res) => {

res.send('The Contact Page');

});

app.get('/about', (req, res) => {

res.send('The About Page');

});

const PORT = 3000;

app.listen(PORT, () => {

console.log(`Server running on port ${PORT}`);

});

在这里,我们导入express模块并调用express()函数来创建一个Express应用程序。这个应用程序将是一个响应网络请求的服务器。

从这个应用程序中,你可以编写之前使用http模块创建的相同路由:

app.get('/', (req, res) => {

res.send('Hello From Node.js');

});

app.get('/contact', (req, res) => {

res.send('The Contact Page');

});

app.get('/about', (req, res) => {

res.send('The About Page');

});

Express使你能够指定并分离应用程序中可用的URL路由,而无需使用if - else语句。

app.get()方法用于响应HTTP GET请求。如果你想为POST方法指定路由,可以使用app.post()(在我们构建应用程序时会详细介绍)。

之后,你可以调用app.listen()方法使服务器监听请求。我们将端口号设为常量,以便重复使用。

要添加未找到(404页面,你可以在PORT变量上方添加另一个app.get()方法,如下所示:

app.get('*', (req, res) => {

res.status(404).send('Not Found');

});

const PORT = 3000;

星号*符号被称为通配符路由,它将匹配任何URL路由。

由于该路由会匹配任何URL,如localhost:3000/alocalhost:3000/b,你需要将此路由定义在所有路由的底部。

Express中,路由的顺序很重要。如果你将通配符路由放在其他路由之上,如下所示:

app.get('*', (req, res) => {

res.status(404).send('Not Found');

});

app.get('/', (req, res) => {

res.send('Hello From Node.js');

});

app.get('/contact', (req, res) => {

res.send('The Contact Page');

});

那么即使你访问有效路由,也会得到404响应。确保将通配符路由定义为应用程序中的最后一个路由。

添加Morgan进行日志记录

你可能会注意到,我们不再将URL请求记录到终端。

因为Express将请求处理程序分离到各自的get()方法中,记录URL意味着你需要在每个处理程序中编写console.log,如下所示:

app.get('/', (req, res) => {

console.log(req.url);

res.send('Hello From Node.js');

});

app.get('/contact', (req, res) => {

console.log(req.url);

res.send('The Contact Page');

});

这看起来不太好!与其手动记录URL,不如使用Morgan来创建详细的日志。

Morgan是一个可用于为你的Node.js应用程序生成详细日志的库。

要使用这个库,你首先需要使用npm进行安装:

npm install morgan

然后在你的index.js文件中,导入该模块并调用app.use()方法,如下所示:

const express = require('express');

const morgan = require('morgan');

const app = express();

app.use(morgan('dev'));

app.use()方法用于注册一个中间件函数,以便它在每个请求上执行。

在这里,我们调用morgan()函数并传递我们想要用于日志的格式,即'dev'

还有其他格式,如'tiny''common'可供使用,但'dev'最适合开发使用。

我稍后会解释中间件的作用。现在,让我们运行服务器并尝试访问一些可用的路由。

你会看到Morgan生成的日志如下:

GET / 304 5.390 ms - -

GET /about 304 0.654 ms - -

GET /contact 304 0.671 ms - -

在这里,你可以看到Morgan记录了请求方法、URL路由、服务器返回的状态以及以毫秒为单位的响应发送时间。

通过使用Morgan,在开发应用程序时日志将更具实用性。

总结

在本章中,你学习了Express如何使Web开发过程更加便捷。你可以使用Expressget()方法分离路由处理程序,因此无需创建嵌套的if语句。你还了解了用于创建详细日志的Morgan库。

http://www.jsqmd.com/news/751496/

相关文章:

  • 终极指南:如何使用Harepacker-resurrected打造专属冒险岛游戏世界
  • fre:ac音频转换器完整指南:从CD抓轨到批量格式转换的终极解决方案
  • 2026年云端新手攻略:如何安装OpenClaw?Coding Plan配置及大模型API Key接入
  • 5分钟终极指南:如何免费激活Windows和Office的完整教程
  • 前端流式数据处理避坑指南:从TextDecoder到@microsoft/fetch-event-source的完整选型
  • Claw Agent Dashboard:OpenClaw AI智能体集群的Web可视化管理平台
  • 即梦去水印软件下载安全吗?即梦AI视频怎么去掉水印?2026实测工具全解析 - 科技热点发布
  • 对比直接使用厂商 API 体验 Taotoken 在路由容灾方面的实际价值
  • 利用 Taotoken 模型广场为智能客服场景选择合适的对话模型
  • 短信发送失败排查指南:从‘发送中’到‘发送失败’,你的短信卡在了哪一步?
  • 基于机器学习的地铁微环境健康风险精准干预神经网络【附代码】
  • PyTorch损失函数避坑指南:MarginRankingLoss里那个容易搞混的y参数到底该怎么设?
  • 无线感知革命:如何用ESP-CSI技术让你的Wi-Fi设备拥有“第六感“?
  • 体验 Taotoken 提供的官方价折扣在长期项目开发中带来的成本优化
  • Android蓝牙开发深度解析:从基础到实战
  • 豆包视频怎么去水印?豆包视频如何去掉水印?2026 实测方法全汇总 - 科技热点发布
  • 【限时解禁】.NET 9官方未文档化的低代码配置协议(含源码级Hook点与动态Schema注入方案)
  • 2026 年客户关系管理系统大盘点:国内外 5 款主流 CRM 对比与选型指南
  • Obsidian Dataview架构深度解析:从笔记数据索引到高性能查询引擎
  • 突破性跨平台模组下载:WorkshopDL如何重新定义Steam创意工坊资源获取
  • 睿家诚家具维修:苏州工业园软硬包装饰定制施工公司推荐几家 - LYL仔仔
  • 从一行成绩单到聚合报表:手把手用Hive数组函数搞定学生成绩分析
  • RandOpt随机优化算法:提升深度学习模型性能的新方法
  • AI 协作提问操作手册
  • 新手福音:在快马平台借助讯飞coding plan概念零基础学Python列表操作
  • 从代码到图表:GraphvizOnline如何改变你的可视化工作流
  • 即梦去水印软件介绍:即梦怎么去水印?2026实测好用工具盘点 - 科技热点发布
  • 别再只调Batch Size了!用DeepSpeed ZeRO-3配置,让你的多卡A100训练百亿模型效率翻倍
  • GEC6818开发板项目复盘:模拟公交终端背后的嵌入式系统设计思路与模块化编程技巧
  • 新手福音:在快马平台零配置上手,轻松运行第一个cmhhc项目