Express 是一个快速,简单,极简的 Node.js web 应用开发框架。通过它,可以轻松的构建各种 web 应用。例如
Express 本身是极简的,仅仅提供了 web 开发的基础功能,但是它通过中间件的方式集成了许许多多的外部插件来处理 HTTP 请求。
Express 中间件的特性固然强大,但是它所提供的灵活性是一把双刃剑。
Express 不对 Node.js 已有的特性进行二次抽象,只是在它之上扩展了 web 应用所需的基本功能。
有很多流行框架基于 Express。
Express 的开发作者是知名的开源项目创建者和协作者 TJ Holowaychuk。
安装Express:npm install express
使用Express创建一个web服务,并输出Hello World;
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${
port}`)
})
路由是指确定应用程序如何响应客户端对特定端点的请求,该特定端点是URI(或路径)和特定的HTTP请求方法(GET,POST等)。
每个路由可以具有一个或多个处理程序函数,这些函数在匹配该路由时执行。
路由定义采用以下结构:
app.METHOD(PATH, HANDLER)
下面是一些例子:
app.get('/', function (req, res) {
res.send('Hello World!')
})
app.post('/', function (req, res) {
res.send('Got a POST request')
})
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user')
})
app.delete('/user', function (req, res) {
res.send('Got a DELETE request at /user')
})
Express 应用使用路由回调函数的参数:request
和 response
对象来处理请求和响应的数据
app.get('/', function (req, res) {
// --
})
Express 不对 Node.js 已有的特性进行二次抽象,只是在它之上扩展了 web 应用所需的基本功能。
req 对象代表 HTTP 请求,并具有请求查询字符串,参数,正文,HTTP 标头等的属性。在本文档中,按照约定,该对象始终称为 req(HTTP 响应为 res),但其实际名称由您正在使用的回调函数的参数确定。
属性 | 说明 |
---|---|
req.app | |
req.body | |
req.cookies | |
req.method | |
req.hostname等等… |
res 对象表示 Express 应用在收到 HTTP 请求时发送的 HTTP 响应。在本文档中,按照约定,该对象始终称为 res(并且 HTTP 请求为 req),但其实际名称由您正在使用的回调函数的参数确定。
方法 | 说明 |
---|---|
res.send() | 响应数据 |
res.write() | |
res.end() | 结束响应的同时并发送响应数据 |
res.status() | 设置响应码 |
res.redirect() | 重定向 |
举个例子:
app.get("/", (req, res) => {
console.log(`${
req.method} ${
req.url} ${
Date.now()}`);
res.send("index");
});
app.get("/about", (req, res) => {
console.log(`${
req.method} ${
req.url} ${
Date.now()}`);
res.send("about");
});
app.post("/login", (req, res) => {
console.log(`${
req.method} ${
req.url} ${
Date.now()}`);
res.send("login");
});
针对上面的例子,我们在每个请求中输出 请求方法+请求路径+请求时间
,有非常多重复的地方,此时我们想到封装
app.get("/", (req, res) => {
// console.log(`${req.method} ${req.url} ${Date.now()}`)
logger(req);
res.send("index");
});
app.get