在软件领域,中间件是在应用与应用之间充当连接服务的,这并非是nodejs的概念,其他领域也会有这个概念。举个例子,比如消息队列、数据库驱动等。 插件一般来说extra的,就是你整个系统或应用不需要插件也能正常工作,插件一般是提供一些额外功能。而且插件这个词本身代表的就是可拓展的(形象的说,可插拔)。 我个人认为 plugin/addon = extra feature 模块一般是系统的负责某一功能的一部分,不可或缺。即 module = a part of system/application
在 nodejs 里一般你在 package.json
里指定的那些package 都是 module,当然你从文件名 node_modules
也能看出来。
@Lhfcws 谢谢你的回答,稍微有点点概念了,因为我最近在学习express,看介绍说是基于Connect中间件的,对Nodejs我只知道模块,虽然我还不是很明白,自己水平太菜了,哈哈。
能举个例子说的更详细一些吗?
把大象放入冰箱的过程是这样的:
function play_with_elephant () {
open(); // 打开门
in_elephant(); // 放入大象
close(); // 关上门
return result;
}
那么如果这样写:
function play_with_elephant (action_elephant) {
open(); // 打开门
action_elephant(); // 捣鼓大象
close(); // 关上门
return result;
}
action_elephant
就可以看作是play_with_elephant的一个中间件,ta运行在一套算法的中间,属于可变动的内容。
当然,在纯OO语言中
Class P {
...
void play_with_elephant (action) {
open(); // 打开门
action.action_elephant(); // 捣鼓大象
close(); // 关上门
}
}
还会看到又臭又长的抽象工厂来包装:
function createPlay (factory) {
var action = factory.creaeAction();
var door = factory.createDoor();
door.open();
action.action_elephant();
door.close();
}
当然了,加上管理
function W () {
this.stack = [];
}
W.prototype.use = function (f) {
this.stack.push(f);
};
W.prototype.play_with_elephant = function () {
play_with_elephant(function () {
this.stack.forEach(function (f) {
f();
});
});
};
balabala...
function play_with_elephant (action_elephant) {
open(); // 打开门
action_elephant(); // 捣鼓大象
close(); // 关上门
return result;
}
mark,学习了
@tulayang 很形象
在学习的express过程中,模块,然后调用之后,也是中间件,有点不明白,意思是把中间件封装成模块了吗
工作流的思想,如pipe函数 可乐的生成:水 --> 净化 --> 调配 --> 装瓶 --> 质检 --> 饮用可乐 水到可乐,每一个中间过程都认为是一个中间件
@enmoon 简单明了
广义上的中间件是说异构系统之间通信的连接模块 比如 Delphi写的桌面app 要跟 java写的Web服务 之间交换数据 需要一个双方都能通信的组件 但在nodejs里,中间件一般是指一个函数队列,你把一堆执行不同操作的函数push到一个队列里,然后每次pop出来执行,直到队列为空,然后说这是中间件,瞬间高大上的感觉
@tulayang 通俗易懂 赞你一个