Express 路由导航

12 篇文章 0 订阅

路由:

路由定义了如何响应客户端请求以及响应结束点。

 

路由是URI的组成部分,包含http请求方法,和一个或多个处理方法。路由的结构为“app.METHOD(path,[callback...],callback)"。”app“是一个express实例,”METHOD“为http请求方法,”path“是服务路径,”callback“路径匹配时执行的方法。

 

下面是一个非常基础的路由示例:

 

var express = require('express')
var app = express()

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

 

 

路由方法:

路由方法衍生于HTTP方法,是express实例的属性。

下面是关于路由的一个例子,定义了应用根路径的GET和POST方法:

 

// GET method route
app.get('/', function (req, res) {
  res.send('GET request to the homepage')
})

// POST method route
app.post('/', function (req, res) {
  res.send('POST request to the homepage')
})

 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...)

 

这里有个一个特殊的路由方法”app.all()",不衍生于任何HTTP方法。它被用于为所有请求方法的路径加载中间件。

例如,下面的例子中,使用GET,POST,PUT,DELETE或“http module”模块提供的其他HTTP请求方法访问“/secret”路径时,将运行处理方法。

 

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

  

 

路由路径:

路由路径,结合路由方法,定义了请求的端点以及哪一类请求可以访问。路径可以是字符串,字符串模式或者正则表达式。

 

备注:Express使用“path-to-regexp”来匹配路径,关于路径的详细信息可以参考它的文档。“Express Route Tester”是测试Express路由的处理工具。

 

注意:查询字符串不是路由路径的一部分。

 

下面是字符串路由路径的例子:

 

// 匹配根“/”路径
app.get('/', function (req, res) {
  res.send('root')
})

// 匹配“/about”路径
app.get('/about', function (req, res) {
  res.send('about')
})

// 匹配"/random.text"路径
app.get('/random.text', function (req, res) {
  res.send('random.text')
})

 下面是字符串模式路由路径的例子:

 

 

// will match acd and abcd
app.get('/ab?cd', function(req, res) {
  res.send('ab?cd')
})

// will match abcd, abbcd, abbbcd, and so on
app.get('/ab+cd', function(req, res) {
  res.send('ab+cd')
})

// will match abcd, abxcd, abRABDOMcd, ab123cd, and so on
app.get('/ab*cd', function(req, res) {
  res.send('ab*cd')
})

// will match /abe and /abcde
app.get('/ab(cd)?e', function(req, res) {
 res.send('ab(cd)?e')
})

 备注:字符?,+,*和()是Express中正则表达式的子集.连字符(-)和点号(.)基于字符串路径逐字解释.

 

 

下面是正则表达式路由路径的例子:

 

// will match anything with an a in the route name:
app.get(/a/, function(req, res) {
  res.send('/a/')
})

// will match butterfly, dragonfly; but not butterflyman, dragonfly man, and so on
app.get(/.*fly$/, function(req, res) {
  res.send('/.*fly$/')
})

 

 

路由处理方法:

你可以针对一个请求提供多个回调函数,它们的行为就像中间件.这里有一个特殊情况: 当回调函数调用"next('route')"时,就会忽略剩余的回调函数.你可以利用这个机制给路径添加先决条件;满足条件则执行后续的路径,不满足条件则继续执行当前路径.

 

路由处理可以是单个的函数,也可以是函数数组,或者两者结合使用.下面是相关的例子:

使用单个函数处理:

 

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!')
})

 

 

响应方法:

下表中响应对象(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()定义的链式路由处理的例子:

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 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。

 

以上内容翻译自Express官网文档,原文参考Express Routing

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值