Express 简介
Express 是一个流行的 Node.js Web 应用程序框架,它提供了一组强大的功能和工具,用于构建 Web 应用程序和 API。它是建立在 Node.js 的 HTTP 模块之上的,通过简化常见任务和提供灵活的路由机制,使得构建 Web 应用程序变得更加快速和简单。
它是web框架,能够提供后端服务能力,并能以类似JSP模版的形式渲染web页面。
express特性
express有两个核心模块——路由和中间件,路由是对请求路径的匹配与处理,中间件则是一个前置方法,比如在请求响应客户端(response to client)之前,你可以通过这个方法对返回的数据进行结构化、过滤或者其他的一些操作。
Express 的基本使用
准备工作
首先,确保你的电脑上已经安装了 Node.js。你可以在 Node.js 的官方网站(https://nodejs.org)上找到安装说明。
创建一个新的 Express 应用程序
mkdir express-demo
cd express-demo
npm init -y
这将创建一个名为 express-demo 的新文件夹,并在其中创建一个新的 Node.js 项目。
安装express
npm install express
以上命令会将 Express 框架安装在当前目录的 node_modules 目录中
创建一个简单的 Express 应用程序
在 my-express-app 文件夹中创建一个名为 app.js 的新文件
touch app.js
并在其中编写以下代码:
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send('hello world!')
})
app.listen(3000, () => {
console.log('Server running at http://localhost:3000/')
})
监听 GET 请求
app.get('/', (req, res) => {
})
参数1: 客户端请求的url地址
参数2: 请求对应的处理函数
req:请求对象
- req.app:当callback为外部文件时,用req.app访问express的实例
- req.baseUrl:获取路由当前安装的URL路径
- req.body / req.cookies:获得「请求主体」/ Cookies
- req.fresh / req.stale:判断请求是否还「新鲜」
- req.hostname / req.ip:获取主机名和IP地址
- req.originalUrl:获取原始请求URL
- req.params:获取路由的parameters
- req.path:获取请求路径
更多参考 https://expressjs.com/zh-cn/4x/api.html#req
res:响应对象
- res.append():追加指定HTTP头
- res.set()在res.append()后将重置之前设置的头
- res.clearCookie():清除Cookie
- res.get():返回指定的HTTP头
- res.json():传送JSON响应
- res.send():传送HTTP响应
- res.status():设置HTTP状态码
执行以上代码:
node app.js
应用实例,访问地址为 localhost:3000
路由
我们已经了解了 HTTP 请求的基本应用,而路由决定了由谁(指定脚本)去响应客户端请求。在HTTP请求中,我们可以通过路由提取出请求的URL以及GET/POST参数等。
想象一下你住在一个公寓楼里,而每个房间都有一个房间号。路由就像是这个房间号一样,它告诉 Express 应用程序当接收到某个特定的 URL 请求时,该去哪里找到处理这个请求的代码。
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send('hello world!')
})
app.listen(3000, () => {
console.log('Server running at http://localhost:3000/')
})
app.get('/todos/:id', (req, res) => {
res.send(`get /todos/${req.params.id}`)
})
app.post('/todos', (req, res) => {
res.send('post /todos')
})
app.patch('/todos', (req, res) => {
res.send('patch /todos')
})
app.delete('/delete', (req, res) => {
res.send('delete /todos')
})
路由模块化
Express 不建议将路由直接挂载到 app 上,而是推荐将路由抽离为单独的模块。这是为了防止一旦项目大,不方便维护
创建路由模块
// todoRoutes.js
const express = require('express');
const router = express.Router();
// 定义用户路由
router.get('/', (req, res) => {
res.send('hello world');
});
router.get('/todos', (req, res) => {
res.send('get todos');
});
module.exports = router;
注册路由模块
// app.js
const express = require('express');
const app = express();
const todoRoutes = require('./todoRoutes');
//app.use() 注册全局中间件,并添加前缀
app.use('/api', todoRoutes);
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
通过这种方式,你可以将不同功能模块的路由分别放在单独的文件中,使得代码更加清晰和易于维护。这种路由模块化的方法使得 Express 应用程序更具可扩展性,
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。