Express 入门之Router - worldtree_keeper的专栏 - CSDN博客

要了解Router我们需要先知道到Application,首先,每一个express实例本身内部就内建了router,所以我们先从简单的下手,先使用application;另外这里我们只选择get方法,作为我们Router.Method, 之所以使用get是因为它足够简单;

 

精确匹配形式

1. get有很多种用法

 

 
  1. var express = require("express");

  2. var app = express();

  3. app.get("/example/c",function(req, res){

  4. res.send("Your url is /example/c");

  5. });

  6. app.listen(3000);

 

 

2. 参数形式

 

 

 
  1. var express = require("express");

  2. var app = express();

  3. app.get('/user/:userid',function(req, res){

  4. res.send(req.params.userid);

  5. });

  6. app.listen(3000,function(){console.log("server is listening on port 3000")});

 

参数形式另外的高级应用

 

3. 正则表达式的形式

 

 
  1. var express = require('express');

  2. var app = express();

  3. app.get(/example/,function(req, res){

  4. res.send('it is use regular expression');

  5. });

  6. app.listen(3000);

 

 

 

4.  神秘的参数 next

 

 

 
  1. var express = require('express');

  2. var app = express();

  3. var func1 = function(req, res, next){

  4. console.log("this is first func");

  5. next();

  6. }

  7. var func2 = function(req, res, next){

  8. //不能这么写,因为这样就相当于后面有设置了一遍head

  9. //res.send("this second func");

  10. console.log("this is second func");

  11. next();

  12. }

  13. var func3 = function(reg,res){

  14. console.log("this is thrid func");

  15. res.send("this is in the func3, end");

  16. }

  17.  
  18. //使用方式1

  19. app.get("/example/",func1,func2,func3);

  20.  
  21. //使用方式2

  22. app.get("/example/",[func1,func2,func3]);

 

匹配好之后就是res

res也有很多种形式

比如jsonp

 

 
  1. var express = require('express');

  2. var app = express();

  3. app.get('/example/defaultCallback?callback=foo',function(req, res){

  4. res.jsop({"message":"this is default callback"});

  5. });

  6. app.get('/example/customizeCallback?cb=foo2',function(req, res){

  7. app.set("jsonp callback name", 'cb');

  8. res.jsonp({"message":"this is customize callback"});

  9. })

  10. app.listen(3000);

默认情况下:http://localhost:3000/example/b?callback=foo

指定情况下:http://localhost:3000/example/c?cb=foo2

 

比如redirect

 
  1. app.get("/example/d", function(req, res) {

  2. var ua = req.get("user-agent");

  3. if (!!ua && ua.toLowerCase().match(/android|ipad|iphone|ipod/)) {

  4. console.log("this is mb");

  5. res.redirect("http://m.browser.baidu.com/mb");

  6. } else {

  7. console.log("This is pc");

  8. res.redirect("http://m.browser.baidu.com/pc");

  9. }

  10. });

 

http://localhost:3000/example/d

在chrome里面,打开开发者模式,切换模拟器。


 


参数形式高级应用

 

 
  1. var express = require('express');

  2. var app = express();

  3. app.get('/user/:userage/:userid', function(req, res, next) {

  4. console.log("in get method: userid:", req.params.userid);

  5. console.log("in get method: userage:", req.params.userage);

  6. next();

  7. });

  8.  
  9.  
  10. app.param("userage", function(req, res, next, value, key) {

  11. console.log("in param key:", key);

  12. console.log("in param value:", value);

  13. next();

  14. });

  15.  
  16.  
  17. app.param("userid", function(req, res, next, value, key) {

  18. console.log("in param key:", key);

  19. console.log("in param value:", value);

  20. next();

  21. });

  22.  
  23.  
  24. app.get('/user/:userid/:userage', function(req, res, next) {

  25. res.send("userid and userage are:", req.params.userid, req.params.userage);

  26. });

  27. app.listen(3000);

 

 

前后顺序与app.param的顺序无关,只与

app.get('/user/:userage/:userid', function(req, res, next) 的顺序有关。

 

OK,Application基本学习完毕了,我们就来说一下Router,其实没有什么大不同,基本上是一致的。

Router有几种参数形式:

1. function(func){}

2. function(url, function){}

第1种主要是针对于这个路由下的所有情况,都会使用经过这个回调函数的处理。

第2种情况是针对于这个路由下的指定的地址,才会触发回调函数的处理。

以下上干货:

 

 
  1. var express = require("express");

  2. var app = express();

  3. var router = express.Router();

  4. router.use(function(req, res, next) {

  5. console.log('%s %s %s', req.method, req.url, req.path);

  6. next();

  7. });

  8.  
  9.  
  10. router.use(express.static(__dirname + "/bar"), function(req, res, next) {

  11. next();

  12. });

  13.  
  14.  
  15. router.use(function(req, res) {

  16. res.send("Hello world");

  17. });

  18.  
  19.  
  20. app.use('/foo', router);

  21.  
  22.  
  23. app.listen(3000);

 

 

因为在app.use中已经制定了父级目录的地址,所以router只需要针对自己目录进行处理即可。

 

 

 

 

本文涉及的学习资源来源于

http://expressjs.com/en/4x/api.html#router.METHOD

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rest测试定义

1.为什么要做接口测试: 1.因为很多系统关联都是基于接口实现的,接口测试可以将系统复杂的系统关联进行简化 2.接口工程比较单一,能够比较好的进行测试覆盖,也相对容易实现自动化持续集成 3.接口相对于界面功能 ,会更底…

团队开发进度报告9

(1)站立会议 (2)任务面板 (3)具体内容 昨天:完成了界面控件按钮的设置问题:PHP数据处理,如何实现在线数据交互问题今天:hbuilder后台环境搭建 转载于:https:/…

nodejs+express整合kindEditor实现图片上传 - 木子丰咪咕晶 - 开源中国

kindEditor官网上中提供了ASP,ASP.NET,JSP相关的整合应用,http://kindeditor.net/docs/upload.html可以参照实现nodejs的整合,发现实用nodejs更简单 环境: unbuntu 14.10 nodejs 0.10.35 express 4.11.2 formidable 1.0.16 kindEditor 4.1.10 webStorm 8 1.通过IDE或终端创建…

基于springboot多模块项目使用maven命令打成war包放到服务器上运行的问题

首先,大家看到这个问题,可能并不陌生,而且脑子里第一映像就是使用mava中的clear package 或者 clear install进行打包,然后在项目中的target文件夹下面找到xxx.war,将这个war包放到外置的tomcat服务器下的webapps下面&…

Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover

1. CAP理论 1.1 Cosistency(一致性) 通过某个节点的写操作结果对后面通过其他节点的读操作可见。 如果更新数据后,并发访问的情况下可立即感知该更新,称为强一致性 如果允许之后部分或全部感知不到该更新,称为弱一致性。 若在之后的一段时间&…

H5页面随机数字键盘支付页面

H5页面随机数字键盘支付页面 有个H5支付的业务需要随机数字的键盘 参考了下文:https://blog.csdn.net/Mr_Smile2014/article/details/52473351 做了一些小修改: 在原有的基础上,增加了一些按键反馈的效果。 每个按键加上边框。 最终效果&…

expressjs路由和Nodejs服务器端发送REST请求 - - ITeye博客

Nodejs创建自己的server后,我们如果需要从客户端利用ajax调用别的服务器端的数据API的接口,这时候出现了ajax跨域问题。 一种是利用在客户端解决跨域问题 这种方案大家可以去网上查查 另一种方案是在服务器端去请求别的服务器,然后将数据再…

Jmeter操作mysql数据库测试

1. 选中线程组鼠标点击右键添加-->配置元件-->JDBC Connection Configuration; 2. DataBase Connection Configuration配置 Variable Name:配置元件的的所有配置所保存的变量,自定义变量名称(不能使用mysql作为变量名,多个…

axios发送自定义请求头的跨域解决

前端发送来的axios请求信息 this.$axios.request({ url:http://127.0.0.1:8001/pay/shoppingcar/, method:post, headers:{ authenticate:a073b3dabbb140e8b9d28debb6a356a1 # 自定义的请求头部信息键值对, }, # 接上,这种key也算是一种请求头,需要加入django中间件内…

前端“智能”静态资源管理 - Onebox - 博客园

前端“智能”静态资源管理 模块化/组件化开发,仅仅描述了一种开发理念,也可以认为是一种开发规范,倘若你认可这规范,对它的分治策略产生了共鸣,那我们就可以继续聊聊它的具体实现了。 很明显,模块化/组件化…

【转】几张图看懂列式存储

几张图看懂列式存储 转载于:https://www.cnblogs.com/apeway/p/10870211.html

hive -e和hive -f的区别(转)

大家都知道,hive -f 后面指定的是一个文件,然后文件里面直接写sql,就可以运行hive的sql,hive -e 后面是直接用双引号拼接hivesql,然后就可以执行命令。 但是,有这么一个东西,我的sql当中有一个s…

我们是如何做好前端工程化和静态资源管理 - 無雄 - 博客园

我们是如何做好前端工程化和静态资源管理 随着互联网的发展,我们的业务也日益变得更加复杂且多样化起来,前端工程师也不再只是做简单的页面开发这么简单,我们需要面对的十分复杂的系统性问题,例如,业务愈来愈复杂&…

Mybatis-plus之RowBounds实现分页查询

物理分页和逻辑分页 物理分页:直接从数据库中拿出我们需要的数据,例如在Mysql中使用limit。 逻辑分页:从数据库中拿出所有符合要求的数据,然后再从这些数据中拿到我们需要的分页数据。 优缺点 物理分页每次都要访问数据库&#xf…

常见的6种JavaScript设计模式

常见的6种JavaScript设计模式 构造函数模式 /*** 构造一个动物的函数 */ function Animal(name, color){this.name name;this.color color;this.getName function(){return this.name;} } // 实例一个对象 var cat new Animal(猫, 白色); console.log( cat.getName() );工…

峰度(Kurtosis)和偏度(Skewness)

峰度(Kurtosis) 定义峰度又称峰态系数,表征概率密度分布曲线在平均值处峰值高低的特征数,即是描述总体中所有取值分布形态陡缓程度的统计量。直观看来,峰度反映了峰部的尖度。这个统计量需要与正态分布相比较。 公式定…

1.27

测试程序提出问题并解决转载于:https://www.cnblogs.com/JustinTimberlake/p/10028870.html

javascript设计模式系列 - LukeLin - 博客园

javascript设计模式系列 创建型: 1.抽象工厂模式(Abstract Factory) 2.构建者模式(Builder) 3.工厂方法模式(Factory Method) 4.原型模式(Prototype) 5.单例模式&a…

多功能嵌入式解码软件(2)

多功能嵌入式解码软件(2) 验证类库 通信协议 下面进行一个示例: 下位机需要向上位机发送3中数据帧,数据帧以功能码来识别,每种数据帧的协议如下3个表格所示,上位机需要把这些数据按照协议解码出来&#xff…

vue项目如何打包扔向服务器 - Hi-Sen - 博客园

当我们将 vue 项目完成后,面临的就是如何将项目进行打包上线,放到服务器中。我使用的是 vue-cli(simple) 脚手架,所以就讲一下如何将项目进行打包,并放到 tomcat 上。 如果是 vue-cli (非 simple 脚手架…