node.js 学习入门(07 - express 模块创建基本 web 服务器)(上)

简介: node.js 学习入门(07 - express 模块创建基本 web 服务器)

1. 什么是 express?

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

使用 Express 可以快速地搭建一个完整功能的网站。

Express 框架核心特性:

可以设置中间件来响应 HTTP 请求。

定义了路由表用于执行不同的 HTTP 请求动作。

可以通过向模板传递参数来动态渲染 HTML 页面。

2. 如何安装 express?

npm install express
3. 使用 express 创建一个基本的 web 服务器

以下实例中我们引入了 express 模块,并在客户端发起请求后,响应 {name:‘张三’,age:18,sex:‘男’,id:1} 对象,如果加入动态参数 ‘/1’ 可以返回 {id:1}。也可以使用 post 请求向客户端响应一个文本字符串。

// 1. 导入 express
const express = require('express')
// 2. 创建 web 服务器
const app = express()
// 4. 监听客户端的 GET 和 POST 请求,并向客户端响应具体的内容
app.get('/user', (req, res) => {
    // 调用 express 提供的 res.send() 方法,向客户端响应一个 JSON 对象
    res.send({name:'张三',age:18,sex:'男',id:1})
})
app.post('/user', (req, res) => {
    // 调用 express 提供的 res.send() 方法,向客户端响应一个文本字符串
    res.send("请求成功")
})
app.get('/', (req, res) => {
    // 通过 req.query 可以获取到客户端发送过来的 查询参数
    // 注意:默认情况下,req.query 是一个空对象
    console.log(req.query)
    res.send(req.query)
})
// 注意:这里的 :id 是一个动态的参数
app.get('/user/:id', (req, res) => {
    // req.params 是动态匹配到的 URL 参数,默认也是一个空对象
    // 可以有多个动态参数   '/user/:id/:name'
    console.log(req.params)
    res.send(req.params)
})
// 3. 启动 web 服务器
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1")
})

4. 使用express.static对外提供静态资源

express.static() 方法,获取 html 页面中的内容,并显示在浏览器中,可以在前面加入一个参数,这样就需要接口加上参数才可以请求到页面信息。app.use() 的作用就是注册全局中间件

const express = require('express')
const app = express()
// 在这里,调用 express.static() 方法,快速的对外提供静态资源
// 如果有多个,会先查找在前的
app.use('/files',express.static('./files'))
app.use(express.static('./clock'))
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1")
})

5. 模块化路由

可以把一个页面拆分开,在入口文件引入,请求的接口页面

  • 入口页面
const express = require('express')
const app = express()
// 1. 导入路由模块
const router = require('./05-router')
// 2. 注册路由模块
// 添加统一的访问前缀
app.use('/api',router)
// 注意:app.use() 的作用就是注册全局中间件
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1")
})
  • 接口页面
// 这是路由模块
// 1. 导入 express
const express = require('express')
// 2. 创建路由对象
const router = express.Router()
// 3. 挂载具体的路由
router.get('/user/list', (req, res) => {
    res.send("Get user list.")
})
router.post('/user/add', (req, res) => {
    res.send("Post user add.")
})
// 4. 向外导出路由对象
module.exports = router

6. 定义中间件函数

中间件函数要写在路由之前,路由里可以调用中间件函数里定义的方法

const express = require('express')
const app = express()
// 定义一个简化的中间件
app.use((req, res, next) => {
    // 获取到请求到达服务器的时间
    const time = Date.now()
    // 为 req 对象,挂载自定义属性,从而把时间共享给后面的所有路由
    req.startTime = time
    next()
})
app.get('/', (req, res) => {
    res.send("Home page."+req.startTime)
})
app.get('/user', (req, res) => {
    res.send("User page."+req.startTime)
})
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1")
})

7. 局部生效的中间件

只在引入中间件的路由里有效

const express = require('express')
const app = express()
// 定义一个局部的中间件
const mw1 = (req, res, next) => {
    console.log("调用了第一个生效的局部中间件")
    next()
}
// 定义一个局部的中间件
const mw2 = (req, res, next) => {
    console.log("调用了第二个生效的局部中间件")
    next()
}
// 创建路由
// 局部中间件只在当前有效
// 可以使用多个,有二种方法 mw1,mw2   [mw1,mw2]
app.get('/',mw1,mw2, (req, res) => {
    res.send("Home page.")
})
app.get('/user', (req, res) => {
    res.send("User page.")
})
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1")
})

8. 错误级别中间件的使用

可以防止程序的崩溃

const express = require('express')
const app = express()
// 定义路由
app.get('/', (req, res) => {
    // 1.1 人为制造错误
    throw new Error('服务器内部发生错误')
    res.send("Home page.")
})
// 定义一个错误级别的中间件,捕获整个项目的异常信息,从而防止程序的崩溃
app.use((err,req, res, next) => {
    console.log("发生了错误" + err.message)
    res.send('Error' + err.message)
})
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1")
})
相关文章
|
21天前
|
安全 Java 数据安全/隐私保护
springSecurity学习之springSecurity过滤web请求
通过配置 Spring Security 的过滤器链,开发者可以灵活地管理 Web 请求的安全性。理解核心过滤器的作用以及如何配置和组合这些过滤器,可以帮助开发者实现复杂的安全需求。通过具体的示例代码,可以清晰地了解 Spring Security 的配置方法和实践。
60 23
|
2月前
|
机器学习/深度学习 JavaScript Cloud Native
Node.js作为一种快速、可扩展的服务器端运行时环境
Node.js作为一种快速、可扩展的服务器端运行时环境
62 8
|
3月前
|
JavaScript
使用Node.js创建一个简单的Web服务器
使用Node.js创建一个简单的Web服务器
|
3月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
121 61
|
3月前
|
JavaScript
使用node.js搭建一个express后端服务器
Express 是 Node.js 的一个库,用于搭建后端服务器。本文将指导你从零开始构建一个简易的 Express 服务器,包括项目初始化、代码编写、服务启动与项目结构优化。通过创建 handler 和 router 文件夹分离路由和处理逻辑,使项目更清晰易维护。最后,通过 Postman 测试确保服务正常运行。
168 1
|
3月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
100 2
|
3月前
|
数据采集 JavaScript 搜索推荐
服务器端渲染(SSR)(Nuxt+Next.js)
服务器端渲染(SSR)技术在服务器上生成页面HTML,提升首屏加载速度和SEO效果。Nuxt.js和Next.js分别是基于Vue.js和React.js的流行SSR框架。Nuxt.js提供自动化路由管理、页面级数据获取和布局系统,支持SSR和静态站点生成。Next.js支持SSR、静态生成和文件系统路由,通过`getServerSideProps`和`getStaticProps`实现数据获取。SSR的优点包括首屏加载快、SEO友好和适合复杂页面,但也会增加服务器压力、开发限制和调试难度。选择框架时,可根据项目需求和技术栈决定使用Nuxt.js或Next.js。
|
3月前
|
缓存 负载均衡 监控
性能优化:Node.js高效服务器开发技巧与最佳实践
【10月更文挑战第29天】在Node.js服务器开发中,性能优化至关重要。本文介绍了几种高效开发的最佳实践,包括使用缓存策略、采用异步编程、实施负载均衡和性能监控。通过示例代码展示了如何实现这些技术,帮助开发者构建更快、更稳定的Node.js应用。
129 2
|
3天前
|
机器学习/深度学习 人工智能 程序员
阿里云出手DeepSeek拒绝服务器繁忙,程序员直呼:真香!
阿里云PAI平台支持一键部署DeepSeek-V3和DeepSeek-R1大模型,用户无需编写代码即可完成从训练到部署的全过程。通过PAI Model Gallery,开发者可轻松选择并部署所需模型版本,享受高效、便捷的AI开发体验。教程详细介绍了开通PAI、选择模型及一键部署的具体步骤,帮助用户快速上手。
|
4天前
|
机器学习/深度学习 存储 弹性计算
阿里云gpu云服务器租用价格:最新收费标准及活动价格参考
阿里云gpu云服务器多少钱?A10卡GN7i GPU云服务器32核188G3213.99/1个月起,V100卡GN6v GPU云服务器8核32G3830.00/1个月起,阿里云GPU云服务器是基于GPU应用的计算服务,多适用于视频解码,图形渲染,深度学习,科学计算等应用场景,该产品具有超强计算能力、网络性能出色、购买方式灵活、高性能实例存储( GA1和GN5特有)等特点。下面小编来介绍下阿里云gpu云服务器最新的收费标准及活动价格。

热门文章

最新文章

  • 1
    打造高效的Web Scraper:Python与Selenium的完美结合
    13
  • 2
    Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
    26
  • 3
    AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
    20
  • 4
    【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
    54
  • 5
    部署使用 CHAT-NEXT-WEB 基于 Deepseek
    342
  • 6
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 7
    java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
    40
  • 8
    零基础构建开源项目OpenIM桌面应用和pc web- Electron篇
    28
  • 9
    【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
    22
  • 10
    FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
    55