Express
简介
Express 基于 Node.js 平台,快速、开放、极简的 web 开发框架
npm install express --save
创建一个 app.js 文件,创建 Express 应用
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('hello wrold');
});
app.listen(3000, () => console.log('listen port 3000'));
运行服务:node app.js
,在浏览器打开127.0.0.1:3000
路由
实现路由的方式
- 针对应用级别
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('首页');
});
app.get('/login', (req, res) => {
res.send('登录页');
});
app.get('/list', (req, res) => {
// 与原生 HTTP 获取方式一致的方法
console.log(req.method);
console.log(req.url);
console.log(req.httpVersion);
console.log(req.headers);
// express特有的获取请求报文的方法
console.log(req.path);
console.log(req.query); // 获取查询字符串
console.log(req.get('host'));
res.send('列表页');
});
app.get('/list/:id', (req, res) => {
console.log(req.params); // 如果路径是 /list/1,结果就是 { id: '1' }
res.send('详情页');
});
app.post('/list', function (req, res) {
res.send('POST request');
});
app.put('/list', function (req, res) {
res.send('PUT request');
});
app.delete('/list', function (req, res) {
res.send('DELETE request');
});
app.all('*', (req, res) => {
res.send('404');
});
app.listen(3000);
- 针对 Router 实例对象
const express = require('express');
const router = express.Router();
router.get('/', (req, res, next) => {
res.render('index', { title: 'Express' });
});
module.exports = router;
路由方法
Express 定义了如下和 HTTP 请求对应的路由方法: get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe, unsubscribe, patch, search, 和 connect
。
路由句柄
路由句柄就是一个回调函数。可以设置多个,它必须要有两个参数,req, res.
- req 是指
incommingmessage
,它表示一些请求信息,这个信息,我们只能获取,不能修改。 - res 是指
serverResponse
,它表示响应对象,可以做服务器上的任何事情。
const express = require('express');
const app = express();
app.get(
'/',
(req, res, next) => {
res.send('one');
next();
},
(req, res, next) => {
res.send('two');
}
);
app.listen(3000);
req、res 相关方法
- req.query 获取查询参数
- req.params 获取路由参数
- req.path 获取路径
- res.send 发送响应的内容,普通字符串和 html 标签均可
- res.sendFile 发送文件
- res.json 发送一个 json 格式的字符串
- res.render 渲染,需要结合模板引擎去使用
- res.download 提供下载
- res.redirect 重定向
express 响应设置
// 获取请求的路由规则
app.get('/response', (req, res) => {
// express 与 HTTP 模块兼容的设置响应的方式
res.statusCode = 404;
res.statusMessage = 'xxx';
res.setHeader('abc', 'xyz');
res.write('响应体');
res.end('xxx');
// express 的响应方法
res.status(500); // 设置响应状态码
res.set('xxx', 'yyy'); // 设置响应头
res.send('中文响应不乱码'); // 设置响应体
// 链式操作
res.status(404).set('xxx', 'yyy').send('你好朋友');
// 其他响应
res.redirect('http://baibu.com'); // 重定向
res.download('./package.json'); // 下载响应
res.json(); // 响应 JSON
res.sendFile(__dirname + '/home.html'); // 响应文件内容
});
中间件
Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架;从本质上来说,一个 Express 应用就是在调用各种中间件。
官方:中间件(Middleware) 是一个函数,它可以访问请求对象(request object)
响应对象(response object), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量
中间件可以做什么?简言之就是使用函数封装公共操作,简化代码
- 执行任何代码
- 修改请求和响应对象
- 终结请求-响应循环
- 调用堆栈中的下一个中间件
在 express 中都有哪些中间件?
- 全局中间件
- 路由级中间件
- 错误处理中间件
- 内置中间件
- 第三方中间件