Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Express:接收路由器实例与在路由文件上创建路由器实例_Node.js_Express - Fatal编程技术网

Node.js Express:接收路由器实例与在路由文件上创建路由器实例

Node.js Express:接收路由器实例与在路由文件上创建路由器实例,node.js,express,Node.js,Express,我掌握了Express的基础,我想知道在处理路线时,选择这些方法中的一种是有区别的还是有客观原因的标准选择: import { Router } from 'express'; const router = new Router(); router.get('/', (req, res) => res.send('hello world')); export default router; VS 第一种方法来自堆栈,第二种方法来自示例 乍一看(并且有OOP背景),第二种方法似乎是为

我掌握了Express的基础,我想知道在处理路线时,选择这些方法中的一种是有区别的还是有客观原因的标准选择:

import { Router } from 'express';

const router = new Router();

router.get('/', (req, res) => res.send('hello world'));

export default router;
VS

第一种方法来自堆栈,第二种方法来自示例

乍一看(并且有OOP背景),第二种方法似乎是为依赖注入而设计的;但既然我们谈论的是javascript,我不确定第一个不是。另外,我不确定测试是如何完成的,所以可能这两种情况都是可测试的


任何关于哪种方法被视为标准方法以及为什么被视为标准方法的见解都值得赞赏。

假设您有许多不同名称空间的路由器,例如在项目的
Router
目录中,因此此目录中的每个文件名(如
userRouters
profileRouters
取决于名称空间内容如下:

var theNamespace='user';
export default function(router) {
  router.get(theNamespace+'/login', (req, res) => res.send('hello world'));
// read Router directory files here synchronously
for(var file in routerFiles){
  require('./Routers/'+file)(router)
}
}

然后,您不需要在一个文件中写入所有路由器,服务器文件中没有名称空间,只需要
Router
目录中的每个文件,如下所示:

var theNamespace='user';
export default function(router) {
  router.get(theNamespace+'/login', (req, res) => res.send('hello world'));
// read Router directory files here synchronously
for(var file in routerFiles){
  require('./Routers/'+file)(router)
}

这不是一个很大的好处,但在rout Handler得到增加的大型项目中,这将是有帮助的

我仍然有点困惑,因为我无法理解这样做的好处。据我(基本的入门级)所知,您可以通过调用
app.use('/users',require('/users/route')获得相同的结果
并且没有将路由器作为参数传递。我看不到它的好处,因为可测试性似乎不是关键问题。请提供一个更详细的示例,以便我能够理解它的好处,好吗?提前感谢!对于稍后发现这一点的人,我想说第一种方法被认为是Express v4中的“标准”(引入路由器实例的版本)。使用路由器实例的好处之一是能够将一些中间件隔离到每个路由器实例级别,从而在文件中声明路由器实例与路由。然后,您可以将任何中间件添加到特定路由器实例。我认为Krakenjs方法与特定实现有更多关系将kraken作为默认添加功能的库。