Express是一个轻量级的Web框架,简单、灵活
也是目前最流行的基于Nodejs的Web框架
通过它我们可以快速搭建功能完整的网站 (express 英文意思:特快列车)
Express现在是4.x版本,更新很快,并且不兼容旧版本,导致现在市面上很多优秀的Node书籍过时
这篇文章是一篇入门级的Express使用,需要一定Node.js的基础
Web应用创建
首先要做的是下载express并引用
npm install express --save
全局安装就+个-g
引用express
var express = require('express'); var app = express();
通过app我们就可以使用各种express的API
在3.x版本的时候是这样写的
var app =express.createServer();
现在这个函数已经被抛弃了
下面正式创建应用
//app.js var express = require('express'); var app = express(); app.get('https://www.jb51.net/', function(req, res){ res.send('Express'); }); app.listen(3000);
启动之后就能给够在页面看到效果
$ node app.js
app.get()
上面的app.listen()就不多说了
用于监听端口
app.get(path, function(req, res){ })
用于用于处理客户端向服务器发送的GET请求
path表示请求的路径
回调函数的req和res是request和response的意思
request表示客户端发送的HTTP请求信息
response表示服务器发送的HTTP响应信息
使用res.send()可以向客户端发送信息
//app.js var express = require('express'); var app = express(); app.get('https://www.jb51.net/', function(req, res){ res.send('<h1>Express</h1>'); }); app.get('/demo', function(req, res){ res.send('<h1>Demo</h1>'); }) app.get('/*', function(req, res){ res.send('<h1>404<h1>'); }) app.listen(3000);
app.post()
app.post(path, function(req, res){ })
用于用于处理客户端向服务器发送的POST请求
和GET请求不同,POST请求不会将信息放在url中
而是写入请求头中
它的解析有所不同,下面再说
app.all()
在此之前还要提一个概念——中间件
Middleware中间件在不同环境下有不同含义
而在我们express中,简单说它就是一个特殊的函数
用来处理HTTP请求的函数
并且它有一个特点——处理完一个中间件可以传递给下一个中间件来处理
funciton(req, res, next){ ... next(); }
(如果不使用执行next函数,那么之后监听的函数也不会执行)
可以向next中传递字符串参数,代表抛出的错误信息
这样当数据往下传递的时候,中间件不再进行处理
直到找到一个错误处理函数为止
在app.all(path, function(req, res, next){ })的使用中
就需要我们定义这样的中间件
这个方法可以过滤所有路径上的请求
换句话说,在其他所有的中间件处理之前
必须先通过app.all()的中间件进行处理
var express = require('express'); var app = express(); app.all('*', function(req, res, next){ res.writeHead(200, ':)'); next(); }); app.get('https://www.jb51.net/', function(req, res){ res.end('<h1>Express</h1>'); }); app.get('/demo', function(req, res){ res.end('<h1>Demo</h1>'); }) app.get('/*', function(req, res){ res.end('<h1>404<h1>'); }) app.listen(3000);
这样不论客户端向我们发出了什么样的路径请求
服务器响应信息前都会先打上响应头
app.use()
app.use([path, ]function(req, res, next){ })
这个方法一般情况是用来调用中间件的
与前面的函数不同,它的第一个path参数可以省略,默认'https://www.jb51.net/'
app.use(express.static(path.join(__dirname, '/public')));
上面的这个用法就是指定静态文件的访问路径
通过next参数我们可以连续调用中间件函数
app.use(function(req, res, next){ console.log(1); next(); }); app.use(function(req, res, next){ console.log(2); next(); }); app.use(function(req, res, next){ console.log(3); }); app.use(function(req, res, next){ console.log(4); });
当发出网络请求的时候
控制台就会输出 1 2 3
因为第三个中间件没有调用next方法
所以处理到此为止
不会输出4
app.use()除了调用中间件
还可以根据请求路径的不同,返回不同信息
但我们一般不会这么用