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');
});
相关推荐
CDwenhuohuo6 小时前
使用 NVM 随意切换 Node.js 版本
node.js
随风起舞17 小时前
node.js里的bind,apply, call的区别是什么
前端·javascript·node.js
神秘代码行者8 小时前
Node.js Buffer 教程
javascript·node.js
USER_A00110 小时前
【Node.js】包的结构及发布
npm·node.js
又逢乱世11 小时前
Node.js 连接 mysql 数据库
数据库·mysql·node.js
USER_A00117 小时前
【Node.js】express框架
node.js·express
温、18 小时前
【nodejs+mysql2+docker】node后端开发+docker部署简记
docker·容器·node.js
懒羊羊我小弟19 小时前
Webpack 基础入门
前端·webpack·rust·node.js·es6
懒羊羊我小弟1 天前
常用Webpack Loader汇总介绍
前端·webpack·node.js