Express 是一个自身功能极简,让你创建健壮必威、

周围难题

怎么样管理 404 ?

在 Express 中,404 实际不是八个荒谬。由此,错误管理器中间件并不抓获 404。那是因为 404 只是意味有些功能未有兑现。也正是说,Express 施行了装有中间件、路由之后依然尚未拿走到其余输出。你所急需做的便是在其有着他中间件的末尾增添一个甩卖 404 的中间件。如下:

app.use(function(req, res, next) { res.status.send('Sorry cant find that!');});

Express 协理什么模板引擎?

Express 帮衬任何符合 (path, locals, callback) 接口标准的模板引擎。具体可看这几个类型:

什么样渲染纯 HTML 文件?

无需!没有供给经过 res.render() 渲染 HTML。你能够通过 res.sendFile() 直接对外出口 HTML 文件。假如你须求对外提供的财富文件过多,能够采纳express.static() 中间件。

安装

npm install express-generator -g
# -h 选项可以列出所有可用的命令行选项:
express -h
路由句柄

可以为呼吁管理提供多个回调函数,其作为看似中间件。独一的界别是这个回调函数有望调用 next('route') 方法而略过其余路由回调函数。能够应用该机制为路由定义前提条件,要是在存活路径上继续实施没风趣,则可将调整权交给剩下的门道。
路由句柄有两种方式,可以是三个函数、一个函数数组,只怕是二者交织,如下:
var cb0 = function (req, res, next) {
console.log('CB0');
next();
}

var cb1 = function (req, res, next) {
console.log('CB1');
next();
}

app.get('/example/d', [cb0, cb1], function (req, res, next) {
console.log('response will be sent by the next function ...');
next();
}, function (req, res) {
res.send('Hello from D!');
});

路由的概念由如下结构组成:app.METHOD(PATH, HANDLETiguan)。个中,app 是一个express 实例;METHOD 是某些 HTTP 诉求格局中的三个;PATH 是劳动器端的渠道;HANDLEKuga 是当路由卓绝到时索要实行的函数。

6. Express 4 迁移

http://www.expressjs.com.cn/guide/migrating-4.html

Express 4 是对 Express 3 的贰个颠覆性改动,也正是说即便你更新了 Express, Express 3 应用会不能够专门的学问。

Express 是多个自家效果与利益极简,完全部是由路由和中间件构成二个的 web 开垦框架:从实质上来讲,三个 Express 应用就是在调用各类中间件。

错误管理中间件

错误管理中间件有 4 个参数,定义错误管理中间件时必得运用那 4 个参数。尽管没有要求 next 对象,也亟须在签名中声称它,不然中间件会被识别为二个例行中间件,不可能处理错误。
错误管理中间件和其余中间件定义类似,只是要动用 4 个参数,实际不是 3 个,其具名如下: (err, req, res, next)。

app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});
个人技能学习笔记,如有雷同,纯属平常,请勿喷,感激同盟。

express 项目 最棒永不全局安装 直接在当前目录下 npm install express --save
生成器 cnpm install express-generator -g
然后express -h 查看是还是不是中标
应用express myapp 创造 cnpm install 安装依赖项 set DEBUG=myaoo & npm start 运转

路由(Routing)是由三个 ULX570I(或许叫路径)和一个一定的 HTTP 方法(GET、POST 等)组成的,涉及到使用怎么着响应顾客端对某些网址节点的走访。
每贰个路由都足以有三个要么多少个Computer函数,当相配到路由时,那一个/些函数将被实行。
路由的概念由如下结构组成:
app.METHOD(PATH, HANDLER)

  • app 是一个 express 实例
  • METHOD 是有些HTTP 央浼方式中的贰个
  • PATH 是劳务器端的不二等秘书技
  • HANDLE中华V 是当路由万分到时索要施行的函数
    // 对网站首页的拜谒归来 "Hello World!" 字样
    app.get('/', function (req, res) {
    res.send('Hello World!');
    });

// 网址首页接受 POST 央求
app.post('/', function (req, res) {
res.send('Got a POST request');
});

Express 内置的 express.static 能够平价地托管静态文件,举个例子图片、CSS、JavaScript 文件等。
将静态财富文件所在的目录作为参数字传送递给 express.static 中间件就足以提供静态财富文件的拜候了。举例,倘诺在 public 目录放置了图片、CSS 和 JavaScript 文件,你就足以:app.use(express.static('public'));
如若您的静态能源贮存在多个目录下边,你能够再三调用 express.static 中间件:
app.use(express.static('public'));
app.use(express.static('files'));

app.all() 是一个特种的路由方法,没有任何 HTTP 方法与其对应,它的效果与利益是对于三个门路上的有所央求加载中间件。
app.all('/secret', function (req, res, next) {
console.log('Accessing the secret section ...');
next(); // pass control to the next handler
});

路由路线和央求方法一同定义了央浼的端点,它能够是字符串、字符串格局或许正则表明式。
字符串:
// 相称 /about 路线的呼吁
app.get('/about', function (req, res) {
res.send('about');
});

// 相配 /random.text 路线的央求
app.get('/random.text', function (req, res) {
res.send('random.text');
});
字符串方式:
// 匹配 abcd、abxcd、abRABDOMcd、ab123cd等
app.get('/abcd', function(req, res) {
res.send('ab
cd');
});
// 匹配 /abe 和 /abcde
app.get('/ab(cd)?e', function(req, res) {
res.send('ab(cd)?e');
});
正则:
// 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等
app.get(/.fly$/, function(req, res) {
res.send('/.
fly$/');
});

app.use(express.static('public'));

path.join()

Arguments to path.join must be strings

将多少个参数组合成二个 path,句法:

path.join([path1], [path2], [...])

由于该方法属于path模块,使用前要求引进path 模块

const express = require('express');
const path = require('path');

var app = express();

app.set('views', path.join(__dirname, 'views'));

app.use(express.static(path.join(__dirname, 'public')));

express生成器

因此使用生成器工具 express 能够长足创制八个施用的龙骨。

1.装置以下命令

//code from http://caibaojian.com/express-basic.html$ npm install express-generator -g

2.在当前目录创造myapp的运用,运维以下命令·

$ express myapp$ cd myapp $ npm install> set DEBUG=myapp & npm start

下一场在浏览器中开拓 网站就能够观察那个应用了。

经过 Express 应用生成器成立的行使日常都有如下目录结构:

.├── app.js├── bin│ └── www├── package.json├── public│ ├── images│ ├── javascripts│ └── stylesheets│ └── style.css├── routes│ ├── index.js│ └── users.js└── views ├── error.jade ├── index.jade └── layout.jade7 directories, 9 files

第一个 express

应用级中间件

应用级中间件绑定到app对象使用 app.use() 和 app.METHOD()
var app = express();
// 未有挂载路线的中间件,应用的各样央浼都会施行该中间件
app.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
// 挂载至 /user/:id 的中间件,任何针对 /user/:id 的乞求都会推行它
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
// 路由和句柄函数(中间件系统),管理指向 /user/:id 的 GET 央求
app.get('/user/:id', function (req, res, next) {
res.send('USER');
});

若是急需在中间件栈中跳过剩余中间件,调用 next('route') 方法将调控权交给下二个路由
// 八当中等件栈,管理指向 /user/:id 的 GET 诉求
app.get('/user/:id', function (req, res, next) {
// 假如 user id 为 0, 跳到下一个路由
if (req.params.id == 0) next('route');
// 不然将调控权交给栈中下叁其中间件
else next(); //
}, function (req, res, next) {
// 渲染常规页面
res.render('regular');
});
// 管理 /user/:id, 渲染一个奇异页面
app.get('/user/:id', function (req, res, next) {
res.render('special');
});

前段时间,public 目录下边包车型大巴公文即可访谈了。

3. 错误管理中间件

http://www.expressjs.com.cn/guide/error-handling.html

错误管理中间件和其余中间件定义类似,只是必供给利用 4 个参数(err, req, res, next)。尽管不要求 next 对象,也必需在签名中宣称它,否则中间件会被辨以为一个正规中间件,不能管理错误。

错误管理中间件应当在在别的 app.use() 和路由调用之后技巧加载,比方:

var bodyParser = require('body-parser');
var methodOverride = require('method-override');

app.use(bodyParser());
app.use(methodOverride());
app.use(function(err, req, res, next) {
  // 业务逻辑
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

中间件重回的响应是自由的,能够响应一个 HTML 错误页面、一句轻巧的话、贰个JSON 字符串,只怕别的任何你想要的事物。

为了便利组织(越来越尖端的框架),您恐怕会像定义常规中间件同样,定义多个错误管理中间件。比方您想为使用 XH智跑 的伸手定义二个,还想为未有使用的定义一个,那么:

var bodyParser = require('body-parser');
var methodOverride = require('method-override');

app.use(bodyParser());
app.use(methodOverride());
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);

// logErrors 将请求和错误信息写入标准错误输出、日志或类似服务:
function logErrors(err, req, res, next) {
  console.error(err.stack);
  next(err);
}

// clientErrorHandler 的定义如下(注意这里将错误直接传给了 next):
function clientErrorHandler(err, req, res, next) {
  if (req.xhr) {
    res.status(500).send({ error: 'Something blew up!' });
  } else {
    next(err);
  }
}

// errorHandler 能捕获所有错误,其定义如下:
function errorHandler(err, req, res, next) {
  res.status(500);
  res.render('error', { error: err });
}

创办一个hello world实例

跻身myapp目录,创立二个名叫app.js,复制以下代码

var express = require('express');var app = express();app.get('/', function  { res.send('Hello World!');});var server = app.listen(3000, function () { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port);});

地点的代码运行贰个劳动并监遵从 3000 端口步向的装有连接央求。他将对负有 UQX56L 或 路由 重临 “Hello World!” 字符串。对于任何兼具路径全体重回 404 Not Found。

经过以下命令行运营

$ node app.js

接下来在浏览器中张开 并查阅输出结果。

选取正则表明式的路由路线

// 匹配任何路径中含有 a 的路径:
app.get(/a/, function(req, res) {
  res.send('/a/');
});

// 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等
app.get(/.*fly$/, function(req, res) {
  res.send('/.*fly$/');
});

路由级中间件

路由级中间件和应用级中间件同样,只是它绑定的目的为 express.Router()。
var router = express.Router();路由级使用 router.use() 或 router.VERB() 加载。
var app = express();
var router = express.Router();
// 没有挂载路线的中间件,通过该路由的每一个央求都会试行该中间件
router.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
// 几当中级件栈,展现任何针对 /user/:id 的 HTTP 央求的音信
router.use('/user/:id', function(req, res, next) {
console.log('Request URL:', req.originalUrl);
next();
}, function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
// 一个中等件栈,管理指向 /user/:id 的 GET 央浼
router.get('/user/:id', function (req, res, next) {
// 借使 user id 为 0, 跳到下二个路由
if (req.params.id == 0) next('route');
// 负担将调整权交给栈中下贰个中间件
else next(); //
}, function (req, res, next) {
// 渲染常规页面
res.render('regular');
});
// 管理 /user/:id, 渲染二个破例页面
router.get('/user/:id', function (req, res, next) {
console.log(req.params.id);
res.render('special');
});
// 将路由挂载至选拔
app.use('/', router);

app.js文件下加多:

结构

路由的定义由如下结构组成:

  • app 是一个 express 实例

  • method 是某个 HTTP 诉求方式中的一个,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。有个别路由艺术名不是合规的 JavaScript 变量名,此时利用括号记法,比如:app['m-search']('/', function ...

  • path 是劳动器端的路径

  • handler 每几个路由都能够有壹个恐怕几个Computer函数,当相称到路由时,这么些函数将被实践。

app.method(path, [handler...], handler)

// respond with "hello world" when a GET request is made to the homepage
app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.all() 是多个异样的路由方法,未有别的 HTTP 方法与其相应,它的法力是对此三个路线上的持有央浼加载中间件。

在上边包车型大巴例子中,来自 /secret 的央求,不管选择 GET、POST 或任何任何HTTP 供给,句柄都会收获推行。

app.all('/secret', function (req, res, next) {
  res.send('GET request to the secret section');
  console.log('Accessing the secret section ...');
  next(); // pass control to the next handler
});

express路由

路由是由多个 UGL450I和多个特定的 HTTP 方法(GET、POST 等)组成的,涉及到使用怎样响应客户端对有些网址节点的拜谒。每一个路由都足以有一个要么多少个计算机函数,当相称到路由时,这些/些函数将被实践。

路由的概念由如下结构构成:app.METHOD(PATH, HANDLE福特Explorer)。其中,app 是多个express 实例;METHOD 是有些 HTTP 要求格局中的八个;PATH 是劳务器端的门路;HANDLE福睿斯 是当路由极度到时索要进行的函数。

以下是有个别大规模的路由代码

var express = require('express');var app = express();// respond with "hello world" when a GET request is made to the homepageapp.get('/', function { res.send('hello world');});// POST method routeapp.post('/', function  { res.send('POST request to the homepage');});//app.all() 是一个特殊的路由方法,没有任何 HTTP 方法与其对应,它的作用是对于一个路径上的所有请求加载中间件。app.all('/secret', function (req, res, next) { console.log('Accessing the secret section ...'); next(); // pass control to the next handler});

采纳字符串情势的路由路线示例:字符 ?、+、* 和 () 是正则表明式的子集,- 和 . 在依赖字符串的门道中依据字面值解释。

// 匹配 acd 和 abcdapp.get('/ab?cd', function { res.send;});// 匹配 abcd、abbcd、abbbcd等app.get('/ab+cd', function { res.send;});// 匹配 abcd、abxcd、abRABDOMcd、ab123cd等app.get('/ab*cd', function { res.send;});// 匹配 /abe 和 /abcdeapp.get?e', function { res.send?e');});//使用正则表达式的路由路径示例:// 匹配任何路径中含有 a 的路径:app.get(/a/, function { res.send;// 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等app.get(/.*fly$/, function { res.send('/.*fly$/');});

可感到呼吁管理提供多少个回调函数,其作为看似 中间件。唯一的差距是那几个回调函数有不小可能调用 next 方法而略过任何路由回调函数。

路由句柄有八种格局,能够是一个函数、一个函数数组,或许是双边交织,如下所示

//使用多个回调函数处理路由(记得指定 next 对象):app.get('/example/b', function (req, res, next) { console.log('response will be sent by the next function ...'); next();}, function  { res.send('Hello from B!');});//使用回调函数数组处理路由:var cb0 = function (req, res, next) { console.log; next();}var cb1 = function (req, res, next) { console.log; next();}var cb2 = function  { res.send('Hello from C!');}app.get('/example/c', [cb0, cb1, cb2]);

下表中一呼百应对象的法子向顾客端重返响应,终结恳求响应的轮回。即便在路由句柄中三个办法也不调用,来自客商端的伸手会直接挂起。

主意 描述res.download() 提示下载文件。res.end() 终结响应管理流程。res.JSON() 发送二个 JSON 格式的响应。res.jsonp() 发送四个支撑 JSONP 的 JSON 格式的响应。res.redirect() 重定向央求。res.render() 渲染视图模板。res.send() 发送各类别型的响应。res.sendFile 以柒个人字节流的花样发送文书。res.sendStatus() 设置响应状态代码,并将其以字符串情势作为响应体的一片段发送。

可接纳 app.route() 创建路由路线的链式路由句柄。由于路线在三个地点钦定,那样做推进创建模块化的路由,并且滑坡了代码冗余和拼写错误。

app.route .get(function { res.send('Get a random book'); }) .post(function { res.send('Add a book'); }) .put(function { res.send('Update the book'); });

可应用 express.Router 类创造模块化、可挂载的路由句柄。Router 实例是二个完好的中间件和路由系统,由此常称其为二个 “mini-app”。

在 app 目录下创设名叫 birds.js 的公文,内容如下:

var express = require('express');var router = express.Router();// 该路由使用的中间件router.use(function timeLog(req, res, next) { console.log('Time: ', Date.now; next;// 定义网站主页的路由router.get('/', function { res.send('Birds home page');});// 定义 about 页面的路由router.get('/about', function { res.send('About birds');});module.exports = router;

然后在利用中加载路由模块:

var birds = require('./birds');...app.use('/birds', birds);

行使就能够管理发自 /birds 和 /birds/about 的呼吁,况兼调用为该路由钦定的 timeLog 中间件。

模板引擎

亟待在利用中开展如下设置本事让 Express 渲染模板文件:

views, 放模板文件的目录,比方: app.set('views', './views')

view engine, 模板引擎,譬喻: app.set('view engine', 'jade')

接下来安装相应的模版引擎 npm 软件包。

npm install jade --save
响应措施

[res.end()] | 终结响应管理流程。 |
[res.redirect()] | 重定向诉求。 |
[res.render()] | 渲染视图模板。 |
[res.send()] | 发送各体系型的响应。 |
[res.sendFile] | 以八位字节流的样式发送文书。 |
可选用 app.route() 成立路由路线的链式路由句柄。由于路径在二个地点钦定,那样做推动创制模块化的路由,何况滑坡了代码冗余和拼写错误。
app.route('/book')
.get(function(req, res) {
res.send('Get a random book');
})
.post(function(req, res) {
res.send('Add a book');
})
.put(function(req, res) {
res.send('Update the book');
});
可应用 express.Router 类制造模块化、可挂载的路由句柄。下边包车型地铁实例程序创设了一个路由模块,并加载了三个中间件,定义了一部分路由,况兼将它们挂载至采取的门路上。
var express = require('express');
var router = express.Router();
// 该路由运用的中间件
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now());
next();
});
// 定义网站主页的路由
router.get('/', function(req, res) {
res.send('Birds home page');
});
// 定义 about 页面包车型大巴路由
router.get('/about', function(req, res) {
res.send('About birds');
});
module.exports = router;
接下来在接纳中加载路由模块:var birds = require('./birds'); ... app.use('/birds', birds);

安装

一呼百应措施 res

下表中一呼百应对象(res)的办法向客商端重回响应,终结哀告响应的循环。假如在路由句柄中三个艺术也不调用,来自用户端的呼吁会平素挂起。

必威 1

运用 Express 托管静态文件

因而 Express 内置的 express.static 能够一本万利地托管静态文件,举个例子图片、CSS、JavaScript 文件等。

将静态财富文件所在的目录作为参数字传送递给 express.static 中间件就能够提供静态财富文件的拜见了。举个例子,倘使在 public 目录放置了图片、CSS 和 JavaScript 文件,你就可以:

app.use(express.static);

当今,public 目录上边包车型大巴公文就足以访谈了。

http://localhost:3000/images/kitten.jpghttp://localhost:3000/css/style.csshttp://localhost:3000/js/app.jshttp://localhost:3000/images/bg.pnghttp://localhost:3000/hello.html

一旦你的静态能源寄放在四个目录上边,你可以频频调用 express.static 中间件:

app.use(express.static);app.use(express.static;

假若您希望全体通过 express.static 访谈的文件都寄存在三个“设想”目录上边,能够经过为静态财富目录钦定二个挂载路线的法子来落到实处,如下所示:

app.use('/static', express.static);

今昔,你就爱能够由此带有 “/static” 前缀的地址来拜谒 public 目录上边包车型地铁文书了。

http://localhost:3000/static/images/kitten.jpghttp://localhost:3000/static/css/style.csshttp://localhost:3000/static/js/app.jshttp://localhost:3000/static/images/bg.pnghttp://localhost:3000/static/hello.html

选拔Express托管静态文件

经过 Express 内置的 express.static 能够实惠地托管静态文件,比如图片、CSS、JavaScript 文件等。

app.use(express.static('public'));

方今,public 目录下边包车型地铁文本就能够访谈了。

//访问
http://localhost:3000kitten.jpg

假使您的静态财富贮存在三个目录上面,你能够屡屡调用 express.static 中间件:

app.use(express.static('public'));
app.use(express.static('files'));

也可以

app.use('/static', express.static('public'));
//访问
http://localhost:3000/statickitten.jpg

模板引擎

views, 放模板文件的目录,比方: app.set('views', './views')
view engine, 模板引擎,比如: app.set('view engine', 'jade')
假设 view engine 设置成功,就无需显式钦命引擎,恐怕在接纳中加载模板引擎模块,Express 已经在其间加载,即不
app.set('view engine', 'jade');
即不用指明视图像和文字件的后缀
app.get('/', function (req, res) {
res.render('index', { title: 'Hey', message: 'Hello there!'});
});

性能Express 不对 Node.js 已有的特性开展贰遍抽象,大家只是在它之上扩展了 Web 应用所需的基本作用

中间件分类

Express 应用可利用如下二种中间件:

  • 应用级中间件
  • 路由级中间件
  • 错误管理中间件
  • 内置中间件
  • 其三方中间件

初始化

新建贰个索引myapp,项目初叶化

$ npm init

安装express

$ npm install express --save

路由句柄

使用一个回调函数处理路由:

app.get('/example/a', function (req, res) {
  res.send('Hello from A!');
});

选择多个回调函数管理路由(记得钦点 next 对象):

app.get('/example/b', function (req, res, next) {
  console.log('response will be sent by the next function ...');
  next();
}, function (req, res) {
  res.send('Hello from B!');
});

动用回调函数数组管理路由:

var cb0 = function (req, res, next) {
  console.log('CB0');
  next();
}

var cb1 = function (req, res, next) {
  console.log('CB1');
  next();
}

var cb2 = function (req, res) {
  res.send('Hello from C!');
}

app.get('/example/c', [cb0, cb1, cb2]);

混合使用函数和函数数组管理路由:

var cb0 = function (req, res, next) {
  console.log('CB0');
  next();
}

var cb1 = function (req, res, next) {
  console.log('CB1');
  next();
}

app.get('/example/d', [cb0, cb1], function (req, res, next) {
  console.log('response will be sent by the next function ...');
  next();
}, function (req, res) {
  res.send('Hello from D!');
});

错误管理中间件

错误处理中间件有 4 个参数,定义错误管理中间件时必须运用那 4 个参数。
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});

    $ npm install express

1. 对 Express 内核和中间件系统的改良

Express 4 不再注重 Connect,何况从水源中移除了除 express.static 外的具有内置中间件。

也正是说现在的 Express 是贰个独自的路由和中间件 Web 框架,Express 的版本进级不再受中间件更新的震慑。

移除了内置的中间件后,您必需显式地抬高全数运维应用需求的中间件。请根据如下步骤:

  1. 安装模块:npm install --save <module-name>
  2. 在运用中引进模块:require('module-name')
  3. 遵守文书档案的叙述使用模块:app.use( ... )

下表列出了 Express 3 和 Express 4 中对应的中间件:

必威 2

选拔字符串情势的路由

在作者驾驭来正是通配符。

// 匹配 acd 和 abcd
app.get('/ab?cd', function(req, res) {
  res.send('ab?cd');
});

// 匹配 abcd、abbcd、abbbcd等
app.get('/ab+cd', function(req, res) {
  res.send('ab+cd');
});

// 匹配 abcd、abxcd、abRABDOMcd、ab123cd等
app.get('/ab*cd', function(req, res) {
  res.send('ab*cd');
});

// 匹配 /abe 和 /abcde
app.get('/ab(cd)?e', function(req, res) {
 res.send('ab(cd)?e');
});

中间件

Express是由路由和中间件构成三个的 web 开荒框架:从实质上的话,八个Express 应用正是在调用各样中间件。
中间件Middleware是一个函数,它能够访谈央浼对象(request object), 响应对象(response object), 和 web 应用中居于伏乞-响应循环流程中的中间件,平日被取名称为 next 的变量。
中间件的法力富含:
-实行别的轮代理公司码。
-修改伏乞和响应对象。
-终结央浼-响应循环。
-调用旅舍中的下四在那之中间件。
只要当前中间件未有甘休诉求-响应循环,则必需调用 next() 方法将调整权交给下贰个中间件,不然央求就能够挂起。

经过 Express 内置的 express.static 能够方便地托管静态文件,譬如图片、CSS、JavaScript 文件等。

4. 平放中间件

Express 在此以前内置的中间件今后已经全副独自作为模块安装使用了

express.static 是 Express 独一内置的中间件,它依据 serve-static,担当在 Express 应用中提托管静态资源。

本文由必威发布于必威-编程,转载请注明出处:Express 是一个自身功能极简,让你创建健壮必威、

相关阅读