关于express框架的加use载中间件的问题
发布于 5 年前 作者 ipengzhou 2921 次浏览 最后一次编辑是 4 年前 来自 问答

在文件app.js中的代码 var routes = require(’./routes/index’); var users = require(’./routes/users’);

app.use(’/’, routes); //这种 将 路由实例以加载中间件的方式,是否是为了1.降低耦合 2.减少app.js的代码臃肿 app.use(’/users’, users);

routes文件夹下的index.js var express = require(‘express’); var router = express.Router(); router.get(’/’, function(req, res, next) { res.render(‘index’, { title: ‘Express’ }); }); module.exports = router;

routes文件夹下的user.js var express = require(‘express’); var router = express.Router(); router.get(’/’, function(req, res, next) { res.send(‘respond with a resource’); }); module.exports = router;

想问一下,在express中,加载中间件的方式,往概念上说,是否就是依赖注入呢?

5 回复

你可以去看看koa的use 基本是一样的 但是koa更简单一些 其实所有的中间件都是一个数组 每一个请求进来以后会依次将req和res带入每个中间件 其实就是个单向的数据流 和依赖注入还是不太一样 你也可以将这种数组改为树其他数据结构 每一个请求其实都是在一个拥有request和response的上下文 我们中间件就是以此来处理这个上下文 最后给与响应 js中有apply和call来实现这个数据流的上下文 我估计express应该是类似的实现 比较作者都是同一帮人 自豪地采用 CNodeJS ionic

不过实际上再想想 apply和call实现的效果和依赖注入还蛮像的 自豪地采用 CNodeJS ionic

@wenshiqi0 我有点儿明白了,其实本质就是给上下文追加属性和方法 use中间件的本质 好比是一个管道 , 流通到哪里之后,会对请求和响应的上下文作相应的处理

应该就是管道思想 对吧

这不是依赖注入。像angular那样可自我声明服务及指明需要的服务才是依赖注入,特点是它会判断各部件的依赖关系然后决定服务加载的顺序。 app.use是基于connect的中间件管理,是流式处理,并不管理依赖,中间件执行顺序跟代码的前后一致。

来自炫酷的 CNodeMD

回到顶部