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');
});
相关推荐
xd0000210 小时前
11. vue pinia 和react redux、jotai对比
node.js
程序猿小D11 小时前
第16节 Node.js 文件系统
linux·服务器·前端·node.js·编辑器·vim
前端老六喔19 小时前
🎉 开源项目推荐 | 让你的 TypeScript/React 项目瘦身更简单!
node.js·前端工程化
醉书生ꦿ℘゜এ19 小时前
npm error Cannot read properties of null (reading ‘matches‘)
前端·npm·node.js
超级土豆粉20 小时前
从0到1写一个适用于Node.js的User Agent生成库
linux·ubuntu·node.js
空中湖1 天前
‘pnpm‘ 不是内部或外部命令,也不是可运行的程序
npm·node.js
SailingCoder1 天前
grafana-mcp-analyzer:基于 MCP 的轻量 AI 分析监控图表的运维神器!
运维·人工智能·typescript·node.js·grafana
又又呢1 天前
前端面试题总结——webpack篇
前端·webpack·node.js
avoidaily1 天前
使用Node.js分片上传大文件到阿里云OSS
阿里云·node.js·云计算
xd000021 天前
8.axios Http网络请求库(1)
node.js