路由定义采用以下结构:
app.METHOD(PATH, HANDLER)
METHOD是请求方法,PATH是路径,HANDLER是处理路由的回调函数。
路由方法
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。
特殊的,有一个路由方法“all”,用于在所有请求方法的路径中装入中间件函数。
在 Express.js 中,中间件是一个可以访问请求对象、响应对象和调用 next 方法的一个函数。在中间件函数中可以执行以下任何任务:执行任何代码、修改 request 或者 response 响应对象、结束请求响应周期、调用下一个中间件 。
在以下示例中,无论您使用 GET、POST、PUT、DELETE 还是在 http 模块中支持的其他任何 HTTP 请求方法,都将为针对“/secret”的请求执行处理程序。
app.all('/secret', function (req, res, next) {
console.log('Accessing the secret section ...');
next(); // pass control to the next handler
});
路由路径
路由路径支持两种匹配模式,字符串模式和正则模式。
字符串模式下可以使用字符 ?
、+
、*
和 ()
,他们的含义与正则中的含义相同。
例如 '/ab(cd)?e'
将匹配 /abe
和 /abcde
等路径。
app.get('/ab(cd)?e', function(req, res) {
res.send('ab(cd)?e');
});
正则模式不需要引号包裹,直接使用正则表达式即可。
例如 /.*fly$/
将匹配 butterfly
和 dragonfly
,但是不匹配 butterflyman
、dragonfly man
等。
app.get(/.*fly$/, function(req, res) {
res.send('/.*fly$/');
});
路由处理函数
app.METHOD(PATH, HANDLER)
HANDLER是处理路由的回调函数。函数可以接受三个参数,req,res和next。
req 是 request 的缩写,表示 HTTP 请求。
res 是 response 的缩写,表示 HTTP 响应。
next 是一个函数,用于调用下一个中间件(下一个回调函数)。
你可以在HANDLER处传入多个回调函数,但是你要记得使用next函数调用下一个回调函数。
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...');
next();
}, function (req, res) {
res.send('Hello from B!');
});
res响应方法
方法 | 描述 |
---|---|
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() 为路由路径创建可链接的路由处理程序。 因为在单一位置指定路径,所以可以减少冗余和输入错误。
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
使用 express.Router 类来创建可安装的模块化路由处理程序。Router 实例是完整的中间件和路由系统;因此,常常将其称为“微型应用程序”。
以下示例将路由器创建为模块,在其中装入中间件,定义一些路由,然后安装在主应用程序的路径中。
在应用程序目录中创建名为 birds.js 的路由器文件,其中包含以下内容:
var express = require('express');
var router = express.Router();
// middleware that is specific to this router
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now());
next();
});
// define the home page route
router.get('/', function(req, res) {
res.send('Birds home page');
});
// define the about route
router.get('/about', function(req, res) {
res.send('About birds');
});
module.exports = router;
接着,在应用程序中装入路由器模块:
var birds = require('./birds');
...
app.use('/birds', birds);
此应用程序现在可处理针对 /birds 和 /birds/about 的请求,调用特定于此路由的 timeLog 中间件函数。
标签:function,req,res,app,Express,next,路由 From: https://www.cnblogs.com/orzmiku/p/Express_02.html基本都是从官网教程抄过来的,看完之后建议读一下express-generator生成出来的应用的源码是怎么写的。