看了express很多次,都是懵懵的,这次居然看得有些明白了。整理一篇笔记吧~
Express是什么?
官网是这么说的:基于Node.js平台,快速、开放、极简的web开发框架。
嗯,express就是一个Node.js框架。他自身功能非常简单,就是在调用各种中间件。
创建Express应用
创建一个Express应用非常简单,官网上面有一个Hello world实例,试一下就懂了,不再多说。
路由
下面来说一下路由,路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。
路由的结构如下:
app.METHOD(path, [callback...], callback);
其中,app是express的一个实例。METHOD 是HTTP请求方法,例如:get、post、put等,path是路径,callback是匹配到该路径时要执行的回调函数。可以定义多个callback。
例如:
var express = require('express');
var app = express();
app.get('/school', (req, res) => {
res.send(‘Hello world’);
})
当匹配到/school 这个路径的时候,回调函数就会被执行,返回给客户端'Hello world'。要注意的是,这个回调函数中,我们必须调用一个响应方法来给客户端响应,并终结请求,否则客户端请求会一直挂起。
响应方法列表如下:
方法 | 描述 |
---|---|
res.download() | 提示下载文件。 |
res.end() | 终结响应处理流程。 |
res.json() | 发送一个JSON格式的响应。 |
res.jsonp() | 发送一个支持JSONP的JSON格式的响应。 |
res.redirect() | 重定向请求。 |
res.render() | 渲染视图模板。 |
res.send() | 发送各种类型的响应。 |
res.sendFile | 以8位字节流的形式发送文件。 |
res.sendStatus() | 设置响应状态码,并将其以字符串的形式作为响应体的一部分发送。 |
中间件
前面的内容都可以忽略不看,中间件还是得看一看的。。中间件的本质就是一个函数,我们可以使用中间件在收到请求后,返回响应之前做一些想做的事情~~
中间件(Middleware)是一个函数,他可以访问请求对象req, 响应对象res以及web应用中处于请求-响应循环流程中的中间件,一般被命名为next变量。
中间件的功能:
- 执行任何代码
- 修改请求和响应对象
- 终止请求
- 调用堆栈的下一个中间件
Express可以使用以下几种中间件: 应用级中间件、路由级中间件、错误处理中间件、内置中间件和第三方中间件。
应用级中间件
应用级中间件绑定到app对象,使用app.use()和app.METHOD()。是的,这里的app.METHOD()和上面路由上讲的app.METHOD()一模一样。
//没有挂载路径的中间件,每个请求都会执行该中间件
app.use((req, res, next) =>{
console.log(‘req’, req);
next(); //注意!必须加next(),才会继续向下去执行下一个中间件,否则请求会被挂起。
});
//挂载到/admin 的中间件,每一个请求都会执行该中间件
app.use('/admin', (req, res, next) =>{
console.log('第一个回调函数'); //这个回调函数就是中间件
next(); //调用第二个回调函数
}, (req, res, next) => {
console.log('第二个回调函数');
next();
});
//匹配到admin路径的get请求,都会执行
app.get('/admin', (req, res, next) => {
res.send('匹配到了admin路径');
});
路由级中间件
路由级中间件和应用级中间件一样,只是他绑定的对象为express.Router();
var express = require(‘express’);
var router = express.Router();
//匹配到admin路径的请求,都会执行
router.use('/admin', (req, res, next) => {
console.log('req', req);
next();
});
错误处理中间件
在app.use()和路由调用后,最后定义错误处理中间件。错误处理中间件和其他中间件一样,只是多了一个参数。注意,必须是四个参数。
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something is wrong!');
});
错误处理中间件可以定义多个,顺序调用就可以了,像这样:
app.use((err, req, res, next) => {
console.error(err.stack);
next()
});
app.use((err, req, res, next) => {
console.error(err.stack);
res.render('error', {error: err})
});
内置中间件
express.static 是express唯一内置的中间件,负责在Express应用中托管资源。
结构如下:express.static(root, [options]); 其中,root是静态资源的根目录,options参数详见链接
每个应用可以有多个静态目录。像这样:
app.use(express.static('public'));
app.use(express.static('uoloads'));
app.use(express.static('files'));
第三方中间件
第三方中间件给Express提供了更多的功能。
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
// 加载用于解析 cookie 的中间件
app.use(cookieParser());
常见的第三方中间件:
- body-parser //用于解析http请求体
- compression //对response数据进行压缩
- cookie-parser //对cookie进行解析,然后通过req.cookies属性来访问所有cookie对象
- cookie-session //提供对session的支持
其实说了这么多,入门级只要记住app.use和app.Method()怎么用就可以了,接下来可以尝试一些小项目,真正用起来才会更深入的掌握express。
如有错误,恳请指正。
参考:Express官网