【求教】什么是中间件,nodejs的概念么?跟插件,模块有什么区别?
发布于 6个月前 作者 fancyboynet 723 次浏览
4 回复

在软件领域,中间件是在应用与应用之间充当连接服务的,这并非是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;
}
回到顶部