NodeJS中模块的不同需求方式

Different require ways of modules in NodeJS

我对在 nodeJS 上使用请求模块感到很困惑。我无法理解以下关于需要此模块的多种方式的基础。

这个片段是正确的,但是,为什么要这样呢?

var express = require('express'),
    app = express(),
    router = express.Router(),
    assert = require('assert'),
    MongoClient = require('mongodb').MongoClient;

比如assert有方法,express也有,为什么不能直接在app变量中声明呢?

var app = require('express'); // like assert = require('assert')

...关于 MongoClient,为什么我不能用与 router 声明相同的方式来做?

var mongo = require('mongodb'),
    MongoClient = mongo.MongoClient();

对于第一个示例,请注意 app = express()app = express 完全不同。前者赋值调用函数的结果,后者相当于你的建议行不通。如果您真的喜欢重复,您可以执行以下操作,但这样您将不会引用 express 模块:

var app = require('express')(),
    router = require('express').Router()

对于您的第二个示例,您再次将函数赋值与函数调用结果赋值混淆了。一个正确的(但有一个不必要的额外行)替代方案是:

var mongo = require('mongodb'),
    MongoClient = mongo.MongoClient

简而言之,只有一种方法可以要求模块 - require('nameOrPath') - 其他一切都与模块系统无关。