【求教】什么是中间件,nodejs的概念么?跟插件,模块有什么区别?
发布于 10 年前 作者 fancyboynet 33289 次浏览 最后一次编辑是 8 年前
11 回复

在软件领域,中间件是在应用与应用之间充当连接服务的,这并非是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,学习了

在学习的express过程中,模块,然后调用之后,也是中间件,有点不明白,意思是把中间件封装成模块了吗

工作流的思想,如pipe函数 可乐的生成:水 --> 净化 --> 调配 --> 装瓶 --> 质检 --> 饮用可乐 水到可乐,每一个中间过程都认为是一个中间件

广义上的中间件是说异构系统之间通信的连接模块 比如 Delphi写的桌面app 要跟 java写的Web服务 之间交换数据 需要一个双方都能通信的组件 但在nodejs里,中间件一般是指一个函数队列,你把一堆执行不同操作的函数push到一个队列里,然后每次pop出来执行,直到队列为空,然后说这是中间件,瞬间高大上的感觉

@tulayang 通俗易懂 赞你一个

回到顶部