专栏首页互联网杂技express中app.use和app.get的区别及解析

express中app.use和app.get的区别及解析

写在前面:最近研究nodejs及其web框架express,对app.useapp.get没理解清,以致踩了坑浪费不少时间,我根据自己实践及总结出此博客,若有错误还请大家多多指教。

结论

先说我发现的结论:

app.use(path,callback)中的callback既可以是router对象又可以是函数 app.get(path,callback)中的callback只能是函数

结论说完,让我们先看个栗子

例子

app.js

var express = require('express');var app = express();var index = require('./routes/index');//1⃣️app.use('/test1',function(req,res,next){
    res.send('hello test1'); 

}); //2⃣️app.get('/test2',function(req,res,next){     res.send('hello test2');     
});     //3⃣️app.get('/test3',index);     //4⃣️app.use('/test4',index);

index是一个路由对象,结果,例1、2、4结果都能正确显示,而例3却报404。index.js很简单,如下:

var express = require('express');var router = express.Router();router.get('/', function(req, res, next) {

  res.send('hello world!');

  });

  
module.exports = router;

两者关系

这说明,给app.get(app.post、app.put同理)赋个路由对象是不行的,其实,可以将app.get()看作app.use的特定请求(get)的简要写法。即

var express = require('express');var app = express();app.get('/hello',function(req,res,next){
    res.send('hello test2');

});

等同于:

var express = require('express');var app = express();var router = express.Router();router.get('/', function(req, res, next) {
  res.send('hello world!');});app.use('/hello',router);

什么时用

那么,什么时用app.use,什么时用app.get呢?

路由规则是app.use(path,router)定义的,router代表一个由express.Router()创建的对象,在路由对象中可定义多个路由规则。可是如果我们的路由只有一条规则时,可直接接一个回调作为简写,也可直接使用app.getapp.post方法。即

当一个路径有多个匹配规则时,使用app.use,否则使用相应的app.method(get、post)

本文分享自微信公众号 - 交互设计前端开发与后端程序设计(interaction_Designer)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-07-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AngularJS与服务器端MVC比较

    这是一篇讨论客户端MVC和服务器端MVC的比较文章。 首先分离关注是架构设计的一个基本原则,多层架构中:数据存储 服务层 API层和表现层各层之间应该最小依赖...

    前朝楚水
  • 2017年IT界最“吃香”的技

    IT行业的失业率仍然徘徊在历史低点,其中某些岗位(如网络和安全工程师和软件开发商)的失业率在1%左右。 Robert Half Technology最近的一项调...

    前朝楚水
  • 如何辨别一个程序员水平的高低?

    问题:如何辨别一个程序员水平的高低? 工作3-5年,大家都做过点什么?但是有的程序员只是技术迁移、完全没解决问题的能力啊?大家盘点下,在你眼中,高工作年限的程序...

    前朝楚水
  • 钢材信息小程序开发总结(三) ---EggJS

    使用access_token请求获取前一天的用户画像 注意: 在零点前后数据会获取不到

    治电小白菜
  • 搞懂springBoot @SpringBootApplication注解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    多凡
  • ASP.NET 开源导入导出库Magicodes.IE Docker中使用

    更新历史 2019.02.13 【Nuget】版本更新到2.0.2 【导入】修复单列导入的Bug,单元测试“OneColumnImporter_Test”...

    HueiFeng
  • ASP.NET 开源导入导出库Magicodes.IE Docker中使用

    【导入】修复单列导入的Bug,单元测试“OneColumnImporter_Test”。问题见(https://github.com/dotnetcore/Ma...

    HueiFeng
  • Hystrix源码解析

      在分布式系统中,难免有对外部接口的依赖,而外部接口有可能出现响应缓慢,大量请求超时,大量访问出现异常等情况。出现上面所说的情况有可能是由很多原因导制的,可能...

    良辰美景TT
  • 如何限制用户在某一时间段多次访问接口

    要知道,如今很多平台的接口都是可以同时被门户网站,手机端,移动浏览器访问,因为接口是通用的,而为了安全起见,有些接口都会设置一个门槛,那就是限制访问次数,也就是...

    风间影月
  • 编码与编程的区别是什么?[每日前端夜话0xCA]

    每个工作领域都有它们的术语表——特定的词与日常生活中的含义截然不同。对于不断发展的软件业的专业词汇尤其如此。在软件开发领域,“engagement”与婚礼无关,...

    疯狂的技术宅

扫码关注云+社区

领取腾讯云代金券