前言
上一篇:node.js在windows和ubuntu下安装及其简单使用
提到如何安装并且使用node.js来运行一个简单的后端程序,但是因为原生的node,要运行一个接口,非常麻烦,所以我们需要用到一些框架来快速开发。比较热门的框架就是express了。
express自带路由功能,可以侦听指定路径的请求,除此之外,express最大的优点就是【中间件】概念的灵活运用,使得各个模块得以解耦,像搭积木一样串起来就可以实现复杂的后端逻辑。除此之外,还可以利用别人写好的中间件,避免重复造轮子。
npm工具
npm是nodejs中的包管理工具,类似python中的pip,可以下载安装一些辅助的包或者中间件,非常方便。
使用以下命令安装express包,Linux下记得加sudo
npm install express
安装好之后,如果运行时报错找不到express,那么我们可以利用npm将express和当前目录进行关联
npm link express
中间件
express的中间件很简单,其实就是一个函数,拥有req, res, next
三个入口参数,分别表示请求上下文,响应上下文,下一个中间件。
function(req, res, next) {
}
使用一段简单的代码就能完成helloworld,现在再回过头来看中间件的概念。
var express = require('express');
var app = express();
// 定义简单hello中间件
var middleware = function(req, res, next) {
res.end("hello world");
}
// 使用中间件
app.get('/test', middleware);
app.listen(8888);
console.log("开始运行于 localhost:8888");
首先我们定义一个中间件名叫middleware
,并且通过app.use把中间件绑定到请求管道
中(这里请求管道是我瞎编的词),请求对象会按照use函数调用的顺序,逐个经过我们use的中间件,每个中间件都可以对请求对象做处理。
我们可以由如下的 代码 -> 中间件结构
图来快速理解。(因为堆栈式的调用,这张图并不完全正确,实际上还有返回的过程,下文会讲。。)
中间件会对每经过的请求对象做出对应的处理,比如上文的代码中,我们直接将这个请求返回了。
next
在中间件的三个参数中,还有一个next参数,它表示了通往下一个中间件的路。通过调用next可以将请求发送给下一个中间件
next();
值得注意的是,如果不调用next,那么请求到这里就断了,就不会传递给下一个中间件了。
我们编写三个中间件,以看看这种类似链表的顺序调用,是怎样运作的。
var express = require('express');
var app = express();
var mw1 = function(req, res, next) {
console.log("请求经过中间件1");
next();
}
var mw2 = function(req, res, next) {
console.log("请求经过中间件2");
next();
}
var mw3 = function(req, res, next) {
console.log("请求经过中间件3");
res.end("hello world");
// 最底部的中间件就不用next了 直接返回响应体
}
// 按照顺序注册中间件
app.get('/test', mw1);
app.get('/test', mw2);
app.get('/test', mw3);
app.