共计 2546 个字符,预计需要花费 7 分钟才能阅读完成。
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
这将创立一个名为 my-express-app 的新文件夹,并在其中创立一个新的 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.download():传送指定门路的文件
- 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 应用程序更具可扩展性,