var express = require('express'); var app = express(),什么是express()? 它是一种方法还是一个构造函数? 它从何而来

var express = require('express'); var app = express(); 

这是我们如何创build一个快速的应用程序。 但是这个“express()”是什么? 它是一个方法还是一个构造函数? 它从何而来??

它是一个方法还是一个构造函数?

无论; 这是一个function ,但如果你说“方法”,我不认为有人会给你一个难的时间。

方法是附加到对象的函数。 在JavaScript中,方法只是通过对象属性引用的函数。

JavaScript中的构造函数是您通过new运算符调用的函数。 尽pipe其他function可能会创造出一些东西,但我们通常不会将它们称为“构造函数”以避免混淆。 有时他们可能是“创造者”或“build设者”的function。

它从何而来?

ExpressJS是一个NodeJS模块 ; express是模块的名称,也是我们通常给出的variables名称,用于引用代码中的主要function,例如引用的内容。 NodeJS提供了requirefunction ,其function是加载模块并为您提供访问权限。 (你不必调用variablesexpression式,你可以做var foo = require('express');而是使用foo来代替,但是惯例是你会使用模块的名字,或者只使用一个部分模块,使用模块文档定义的那个部分的名称。)

您将使用Node的requirefunction来使用express模块​​。 需求类似于导入或包含其他语言的关键字。 require将包的名称作为string参数,并返回一个包。 返回的对象没有什么特别之处 – 它通常是一个对象,但它可能是一个函数,一个string或一个数字。

 var express = require('express'); 

=>需要Express模块​​就像你需要其他模块一样,并把它放在一个variables中。

 var app = express(); 

=>调用express函数“express()”并将新的Express应用程序放入应用程序variables(启动新的Express应用程序)中。 这就像你正在创build一个类的对象。 “express()”就像class,app是新创build的对象。

通过查看下面的expression代码,您可以很好地了解内部真正发生的事情。

文件1:index.js

 'use strict'; module.exports = require('./lib/express'); 

文件2:lib / express.js

 'use strict'; var EventEmitter = require('events').EventEmitter; var mixin = require('merge-descriptors'); var proto = require('./application'); var Route = require('./router/route'); var Router = require('./router'); var req = require('./request'); var res = require('./response'); /** * Expose `createApplication()`. */ exports = module.exports = createApplication; function createApplication() { var app = function(req, res, next) { app.handle(req, res, next); }; mixin(app, EventEmitter.prototype, false); mixin(app, proto, false); app.request = { __proto__: req, app: app }; app.response = { __proto__: res, app: app }; app.init(); return app; } exports.application = proto; exports.request = req; exports.response = res; exports.Route = Route; exports.Router = Router; }); 

如何需要工作

当你在节点中调用require('some_module')时会发生什么:

  1. 如果在当前文件夹节点中存在一个名为some_module.js的文件,将加载该文件,否则:

  2. 节点在当前文件夹中查找带有some_module文件夹的node_modules文件夹。

  3. 如果找不到,则会上传一个文件夹并重复步骤2

这个循环重复,直到节点到达文件系统的根文件夹,然后检查全局模块文件夹(例如Mac OS上的/ usr / local / node_modules),如果它仍然没有findsome_module,将会抛出exception。