[Express-02] 路由配置
来源:互联网 发布:阿里云域名备案 编辑:程序博客网 时间:2024/05/21 03:18
1、实现路由
express模块为我们提供了一些方法,通过这些方法我们可以很方便的在Express服务器中实现路由。语法如下:
app. <method> ( path, [callback. . . ] , callback)
定义路由分为两部分:
1是HTTP请求方法(通常是GET或者POST);
2是URL指定路径;例如:‘/’用于网站的根目录,‘/login’用于登录页面,’/cart’用于购物车;
实例-4.1: 基本的GET和POST路由
app.get('/', function(req, res) { res.send("Homepage");});app.get('/login', function(req, res) { res.send('Login page');});app.get('/cert', function(req, res) { res.send('Cert page');});app.post('/save', function() { res.send('Save page');});
当Express HTTP 服务器接收一个请求时,他会查找已经为方法和路径定义好的路由。如果找到匹配上,就创建request对象和response对象来管理请求,并将这两个对象传递给路由的回调函数。
Express还提供了一个app.all()方法,它的功能与app.get( )和app.post( )一样。
实例-4.2:
app.all('*', function(req, res) { // 全部路径的全局处理程序});app.all('/user/*', function(req, res) { // user路径的全局处理程序});
2、路由中的参数
1>、查询字符串
这也是最常用的方法,通过在URL后面添加标准的HTTP查询字符串”?key=value&key=value…”添加路由参数到URL路径中,之后在程序里使用url.parse()方法解析request对象的url属性来获取参数。但是这种方式会使得URL变得非常难懂。
下面的代码实现到’/find?author=&title=’的基本GET路由,它接受author和title参数。当真要获取作者和标题的值时,用url.parse()方法创建查询对象。
var express = require('express'), url = require('url'), app = express();app.get('/find', function(req, res) { var url_parts = url.parse(req.url, true); var query = url_parts.query; res.send('Find books, author:' + query.author + ", Title:" + query.title);});
2>、使用正则表达式
定义一个正则表达式作为路由的路径部分。Express使用正则表达式来解析URL并把与表达式匹配的路径作为参数存作为参数数组存储。
使用正则表达式你可以让路径实现不遵循标准的”/”格式模式。
下面,我们实现一个正则表达式解析器,它给位于URL: /book/:的GET请求生成路由参数,代码如下:
app.get(/*\/book\/(\w+)\:(\w+)?$/, function(req, res) { res.send("Get Book, Chapter:" + req.params[0] + ', Page:' + req.params[1] );});
注意: 参数的值未被赋值。而req.params是与URL路径中的条目匹配的数组。
如果是如下URL:
/book/express路由/107
则,res.send()方法返回的是:
Get Book, Chapter: expre路由,Page:107
3、使用已定义的参数来应用路由参数
下面,先看一个实例:
app.get('/user/:userid', function() { res.send("Get User," + req.param("userid") );});
假如,URL是:
/user/:1001
res.send()方法返回值是:
Get User, 1001
注意: 使用已定义的参数,可以在路由的路径中按名称定义参数;当定义参数时req.param是一个函数,而不是数组,而req.param( param_name )方法返回参数值。
1> 为已定义的参数定义回调函数
当解析URL时,如果Express发现某个参数有定义的回调函数的话,它就会在调用路由回调函数之前调用参数回调函数。
要注册一个参数的回调函数,需要使用app.param()方法。
app.param( param, function(req, res, next, value) { // code...........});
req和res与路由回调函数的对象时相同的;
next参数是一个用于已注册的下一个app.param()回调的回调函数(如果有的话)。你必须在回调函数的某处调用next(),否则回调链就会被破坏;
value参数是从URL路径解析的参数的值;
看下面示例代码:
app.param('userid', function(req, res, next, value) { console.log("Userid: " + value);});
假如URL为:
/user/1329
则console.log()语句显示的将是:
Userid: 1329
下面,是一个完整的应用路由参数的示例代码:
var express = require('express'), url = require('url'), app = require();app.listen( 2337 );app.get('/', function(req, res) { res.send("Homepage");});// 使用查询字符串app.get('/find', function(req, res) { var url_parts = url.parse(req.url, true); var query = url_parts.query; var response = "Find Book, Author:" + query.author + ", Title" + query.title; console.log("\nQuery Url:" + req.originalUrl); console.log( response ); res.send( response );});// 使用正则表达式app.get(/^\/book\/(\w+):(\w+)?$/, function(req, res) { var response = "Chapter:" + req.param[0] + ", Page:" + req.param[1]; console.log('\nRegex URL:' + req.orignalUrl); console.log( response ); res.send( response );});// 使用已定义的参数来应用路由参数app.get('/user/:userid', function(req, res) { var response = "Get userid: " + req.param('userid'); console.log('\nParam URL:' + req.originalUrl); console.log( response ); res.send( response );});// 给已定义的参数定义回调函数app.param('userid', function(req, res, next, value) { console.log('\nRequest received with userid: ' + value); next(); // 不要忘记还有它});
- [Express-02] 路由配置
- express ejs路由分类汇总(配置)
- node express 配置路由返回html文件
- Express路由
- express路由
- express 路由
- Express配置单页应用(SPA)路由
- Node.js express路由
- express 路由控制
- express的路由
- express 路由控制
- Express.js路由详解
- express路由设计
- 16.express 路由控制
- Express路由 与 Application
- express框架的路由
- express的路由写法
- express 路由的使用
- 二叉树后序遍历算法
- 二分法查找基础
- MAC OS下OpenSSL生成私钥和公钥以及RSA加密
- U3D 游戏引擎之游戏架构脚本该如何来写
- 数据结构(1)队列(C语言版)
- [Express-02] 路由配置
- python爬虫代码简化1
- Trie(字典树)的学习
- MD5的简单学习,钥匙串
- Android_eventbus第三方库_EventBus的使用
- 二叉树查找公共祖先
- JS无提示关闭浏览器窗口脚本以及不同浏览器对window.close()不同表现
- leetcode-20-Valid Parentheses
- idea project 报错