Node.js中express框架(三)

一、初识express

Express是一个基于Node.js的Web应用程序框架,它提供了一套简洁而强大的API,用于构建Web和移动应用程序。Express通过简化Web和移动应用程序的开发,使得能够专注于业务逻辑的实现,而不是繁琐的底层细节。它支持各种HTTP请求方法,如GET、POST、PUT、DELETE等,非常适合用于构建RESTful API。

复制代码
//导入express
const express = require('express')
//创建web服务器
const app = express()
//启动web服务器
app.listen(80, () => {
    console.log('web服务器启动成功,http://localhost')
})

二、express中的路由

在Web开发中,路由是指根据URL将请求转发到正确的处理器的方法。在Node.js和Express中,路由用于确定对于特定的HTTP请求方法和路径,应该调用哪个服务器端函数。

复制代码
const express = require('express');
const app = express();

app.get('/api/data', (req, res) => {
  res.send('Hello, this is data!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

以上方式中只是创建了一个简单的路由,在做项目中其实这种创建方式有很大的弊端,后续维护起来会超级麻烦,所以我们一般要设计成模块化。通常的做法是将所有涉及到路由的服务器函数放置在一个名为router.js的文件中,使用module.exports导出路由,

复制代码
// 引入express模块
const express = require('express');
// 创建路由
const router = express.Router()
//挂在路由
router.get('/user', (req, res) => {
    res.send('Hello World!')
})
router.post('/add',(req, res)=> {
    res.send('Got a POST request')
})
// 导出路由
module.exports = router

再在创建服务器的文件中导入路由即可。

复制代码
//导入express
const express = require('express')
//创建web服务器
const app = express()
//导入路由模块
const router = require('./router')
//注册路由--不加前缀
// app.use(router)

//为路由模块添加前缀
app.use('/api', router)
//启动web服务器
app.listen(80, () => {
    console.log('web服务器启动成功,http://localhost')
})

三、中间件

中间件是Express框架中的一个核心概念,它允许开发者在请求处理流程中的不同阶段插入自定义的逻辑。中间件本质上是一个函数,它接收请求对象(req)、响应对象(res)以及一个名为next的函数作为参数。通过调用next函数,可以将控制权传递给下一个中间件或路由处理函数。

中间件在Express中扮演着至关重要的角色,它可以执行各种任务,如身份验证、日志记录、错误处理、参数解析、CORS设置等。中间件可以分为全局中间件和局部中间件:

1.全局中间件

在应用程序中全局生效,所有请求都会经过该中间件。通常用于一些通用的处理逻辑,如解析请求体、处理静态文件等。

复制代码
// 全局解析JSON请求体
app.use(express.json());

2.局部中间件

只作用于特定的路由或请求。适用于那些只针对部分路由进行的处理逻辑。

复制代码
// 局部中间件函数
const checkAuth = (req, res, next) => {
  const auth = req.headers.authorization;
  if (auth === 'secret-token') {
    next(); // 如果验证通过,继续处理下一个中间件或路由
  } else {
    res.status(403).send('Forbidden'); // 否则返回403
  }
};

// 在特定路由中使用局部中间件
app.get('/protected', checkAuth, (req, res) => {
  res.send('This is a protected route');
});
相关推荐
用户6724653660517 小时前
Node 守护进程日志转发踩坑记:stdio 管道、UTF-8 截断,和一个字符串按值传参的故事
node.js
coderCN18 小时前
Nodejs express+knex(ORM框架)
前端·node.js
coderCN18 小时前
Nodejs mysql2+express+yaml
node.js
烬羽18 小时前
我把"时间胶囊"部署上腾讯云宝塔,跨域从根源消失了
nginx·node.js·全栈
__zRainy__20 小时前
Node系列 · Express:cookie 的基本概念
express
东风破_1 天前
danci 2:创建的单词书到底存在哪里?从 Supabase 一路理解 ORM、Drizzle 和 RLS
数据库·后端·node.js
东风破_1 天前
danci 项目(三):从 JSON 数据到 AI Coding,真实项目里的数据清洗、Prompt 和工程规范
前端·后端·node.js
东风破_1 天前
danci 项目(一):从需求到架构,一个单词学习系统为什么会这样设计
前端·后端·node.js
__zRainy__1 天前
Node系列 · Express:常用的中间件
中间件·node.js·express
FungLeo1 天前
成为全栈·Node 后端篇·框架选型:Express、Koa、Fastify、NestJS 的差异与为何选 Hono
express·koa·nest.js·fastify·hono