Express 知识点总结
2017年06月05日
安装
首先使用下面命令创建package.json
文件,大多数情况下只需按回车接收缺省值即可:
npm init
然后下面命令是按照Express
,并将其保存在依赖项列表中,即保存在package.json
中:
npm install express --save
也可暂时安装Express
不添加至依赖项列表:
npm install express
最简单应用程序 Hello World
在项目根目录,创建index.js
文件,写入下面代码:
1var express = require('express'); 2var app = express(); 3 4app.get('/', function (req, res) { 5 res.send('Hello World!'); 6}); 7 8app.listen(8000, function () { 9 console.log('http://localhost:8000'); 10});
也可写成下面形式:
1var express = require('express'); 2var https = require('https'); 3var http = require('http'); 4var app = express(); 5 6http.createServer(app).listen(80); 7https.createServer(options, app).listen(443);
使用 Express 应用生成器
使用前需先全局安装:
npm install express-generator -g
然后下面命令即可创建名为myapp
的Express
应用程序:
express --view=pug myapp
之后运行下面命令启动应用程序:
DEBUG=myapp:* npm start
运行原理
Express
框架建立在node.js
内置的http
模块之上,实质为对http
模块的再包装,等于在http
模块之上,加了一个中间层。
Express
采用中间件的方式运行程序。
use 方法
use
是express
注册中间件的方法,它返回一个函数。下面是一个连续调用两个中间件的例子:
1var express = require('express'); 2var app = express(); 3 4app.use(function (req, res, next) { 5 console.log(req.method, req.url); 6 next(); 7}); 8 9app.get('*', function (req, res) { 10 res.send('Hello World!'); 11}); 12 13app.listen(8000, function () { 14 console.log('http://localhost:8000'); 15});
上面代码使用app.use
方法,注册了两个中间件。收到 HTTP 请求后,先调用第一个中间件,在控制台输出一行信息,然后通过next
方法,将执行权传给第二个中间件,输出 HTTP 回应。由于第二个中间件没有调用next
方法,所以 request 对象就不再向后传递了。
use 添加路径参数
use
方法允许将请求网址写在第一个参数,如下:
1app.use('/path', someMiddleware);
模式匹配
1app.get('/post/:id', function (req, res) { 2 res.send(req.params.id); 3});
提供静态文件
使用express.static
内置中间件函数可加载静态文件。
1app.use(express.static('public'));
以上代码在public
目录中提供静态文件。
Express 相对于静态目录查找文件,因此静态目录的名称不是此 URL 的一部分。
使用模板引擎
在 Express 可以呈现模板文件之前,必须设置:
views
:模板文件所在目录。例如:app.set('views', './views')
view engine
:要使用的模板引擎。例如:app.set('view engine', 'jade')
然后安装对应的模板引擎 npm 包:
$ npm install jade --save
当然也可使用其他模板引擎。
参考网址:使用模板引擎
搭建 HTTPS 服务器
1var express = require('express'); 2var fs = require('fs'); 3var https = require('https'); 4 5var app = express(); 6 7var options = { 8 key: fs.readFileSync('./214095122480677.key'), 9 cert: fs.readFileSync('./214095122480677.pem'), 10}; 11 12https.createServer(options, app).listen(443);
Router
Router
是小型的 express 应用程序,可挂载至某个路径,为程序带来了更大的灵活性,既可以定义多个路由器实例,也可以为将同一个路由器实例挂载到多个路径。
1var express = require('express'); 2var app = express(); 3var router = express.Router(); 4 5router.get('/', function (req, res) { 6 res.send('hello'); 7}); 8router.get('/login', function (req, res) { 9 res.send('login page'); 10}); 11 12// 同一个Router挂载至两个路径 13app.use('/blog', router); 14app.use('/', router); 15 16app.listen(8000, function () { 17 console.log('http://localhost:8000'); 18});