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")
})
相关文章
|
3月前
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
3月前
|
开发框架 JavaScript 前端开发
使用 Node.js 和 Express 构建 Web 应用
【10月更文挑战第2天】使用 Node.js 和 Express 构建 Web 应用
|
2月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
2月前
|
JavaScript
使用Node.js创建一个简单的Web服务器
使用Node.js创建一个简单的Web服务器
|
2月前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
2月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
62 3
|
2月前
|
JavaScript
使用node.js搭建一个express后端服务器
Express 是 Node.js 的一个库,用于搭建后端服务器。本文将指导你从零开始构建一个简易的 Express 服务器,包括项目初始化、代码编写、服务启动与项目结构优化。通过创建 handler 和 router 文件夹分离路由和处理逻辑,使项目更清晰易维护。最后,通过 Postman 测试确保服务正常运行。
116 1
|
2月前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
3月前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
89 1
|
2月前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
67 0