var app = express();
var router = express.Router();

以上二者的区别是什么,什么时候用哪个最合适?

区别看下面的例子:

app.js

var express = require('express'),
dogs = require('./routes/dogs'),
cats = require('./routes/cats'),
birds = require('./routes/birds'); var app = express(); app.use('/dogs', dogs);
app.use('/cats', cats);
app.use('/birds', birds); app.listen(3000);

dogs.js

var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {
res.send('GET handler for /dogs route.');
}); router.post('/', function(req, res) {
res.send('POST handler for /dogs route.');
}); module.exports = router;

在app.js 中调用 express() 时,返回一个app对象。

app对象可以看作创建了一个Express应用程序,app的作用是做一些全局的处理

router是开发人员做业务处理的利器(比如你可以通过router去use你自己写的针对某个特定路由的中间件),这样的好处可以更细的划分controller,router就是一个mini的app。router可以更细的划分controller。

“迷你应用程序”背后的想法是,应用程序中的不同路线可能变得相当复杂,你可以从将该逻辑移动到单独的文件中获益。

在上面这个简单的例子中,/dogs 路由的逻辑已经被移动到自己的文件中,所以它的 GET 和 POST 处理程序不会混乱 app.js。

现在,你可以独立地处理对 /dog 的任何请求的逻辑,而不用担心它将如何影响猫 /birds。

如果你具有与所有三条路由相关的逻辑(Express 中称为中间件),则可以将其放在 app.use(...) 调用上方的 app.js 中。

如果你有逻辑仅与其中一条路线(/dog)相关,那么你只将它放在该路由的文件中。

至于什么时候使用,其实上面的例子已经解释了。

如果代码非常简单,完全可以 app.get('/',....),如果路由比较复杂,使用 express.Router() 更合适。

express中app和router的区别的更多相关文章

  1. node.js之express中app.use

    express中app.use 用法: app.use([path,] function [, function…]) 一.app.use() 在express中是怎么工作的 app.use在expr ...

  2. express中app.get和app.use的解析

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

  3. express中app.use()使用方法

    app.use([path,] function [, function…]) 在path上安装中间件,如果path没有被设定,那么默认为”/”. 当为路由设置一个匹配路径后,路由会匹配该路径及该路径 ...

  4. Express中app.use()用法 详解

    app.use(path,callback)中的callback既可以是router对象又可以是函数 app.get(path,callback)中的callback只能是函数 当一个路由有好多个子路 ...

  5. node.js--使用Express中app.use()分模块开发

    app.use(path,callback)中的callback既可以是router对象又可以是函数:将一个URL路径与一个函数绑定,第一个参数为访问的路径,如果第一参数为空,则表示任何路径都触发这个 ...

  6. vue中$route 和$router的区别

    在vue中会出现一种情况 const url=this.$route.query.returnURL; this.$router.push(url);    $router和$route的区别傻傻的分 ...

  7. vue-cli中route和router的区别

    在使用vue-router的时候经常分不清router和route的区别: 在函数式编程中: this.$router.push('/login') 或者Router.push() 在动态获取路由参数 ...

  8. 学习使用ExpressJS 4.0中的新Router

    概述 ExpressJS 4.0中提出了新的路由Router.Router好比是一个"迷你版"的express应用,它没有引入views或者settings,但是提供了路由应有的A ...

  9. .7-浅析express源码之Router模块(3)-app[METHODS]

    之前的讨论都局限于use方法,所有方式的请求会被通过,这一节讨论express内部如何处理特殊请求方法. 给个流程图咯~ 分别给出app.METHODS与router.METHODS: // app. ...

随机推荐

  1. 临时产品id记录

    id: 5095552c4fb94e01b37561fac5b20b42 cf51ceb55f5341b78592e8fead31e5c8

  2. 【HANA系列】SAP HANA使用XS和HTTP创建proxy

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA使用XS和HTT ...

  3. python学习之数据类型(List)

    3.5 列表 3.5.1 列表的介绍 ​ 列表是python的基础数据类型之⼀,其他编程语言也有类似的数据类型. 比如JS中的数组, java中的数组等等.它是以[ ]括起来, 每个元素⽤' , '隔 ...

  4. A1139-引爆炸弹 计蒜客 bfs剪枝

    题目链接 https://nanti.jisuanke.com/t/A1139 在一个 n \times mn×m 的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上 ...

  5. backbone.js 教程(1) View & Model & Collection

    Backbone.js Overview 它由Jeremy Ashkenas开发,最初发行于2010-10-13 它是一个轻量的JavaScript类库,只依赖于underscore.js,非强制依赖 ...

  6. 运维日常之机房浪潮服务器硬盘红灯亮起,服务器一直响,raid磁盘红色。。。故障解决方法

    按Ctrl+H进入到WebBIOS内,看见的错误如下所示: 错误是PDMissing,只不过维护的IBM服务器错误的磁盘不是第一块,而是第三块而已,不过坏哪块硬盘没有影响,重要的是错误的原因.这种错误 ...

  7. Qt - 基于TCP的网络编程

    TCP(传输控制协议 Transmission Control Protocol) 可靠.面向数据流.面向连接  的传输协议.(许多应用层协议都是以它为基础:HTTP.FTP) 使用情况: 相比UDP ...

  8. Codeforces 1140F Extending Set of Points (线段树分治+并查集)

    这题有以下几个步骤 1.离线处理出每个点的作用范围 2.根据线段树得出作用范围 3.根据分治把每个范围内的点记录和处理 #include<bits/stdc++.h> using name ...

  9. springboot2.0和Druid整合配置数据源

    1. idea使用spring 初始化工具初始化springboot项目(要选中web) 下一步,下一步 2. 在pom.xml中,引入Druid连接池依赖: <dependency> & ...

  10. 如何跳出iframe父级,打开一个链接

    假设使用window的跳转方法 ①window.parent.frames.location.href = "1.html";    //可以跳出iframe父级      此方法 ...