Javascript var express=需要(';express';);var app=express(),什么是express()??它是一个方法还是一个构造函数?它来自哪里
这就是我们创建express应用程序的方式。但是这个“express()”是什么?它是一个方法还是一个构造函数?它是从哪里来的 它是一个方法还是一个构造函数 都不是;这是一个函数,虽然如果你说“方法”,我不认为有人会给你带来困难 方法是附加到对象的函数。在JavaScript中,方法主要是通过对象属性引用的函数。(更新:从ES2015开始,如果您使用方法语法来创建它们,它们的数量会稍微多一些,因为它们可以访问Javascript var express=需要(';express';);var app=express(),什么是express()??它是一个方法还是一个构造函数?它来自哪里,javascript,node.js,express,Javascript,Node.js,Express,这就是我们创建express应用程序的方式。但是这个“express()”是什么?它是一个方法还是一个构造函数?它是从哪里来的 它是一个方法还是一个构造函数 都不是;这是一个函数,虽然如果你说“方法”,我不认为有人会给你带来困难 方法是附加到对象的函数。在JavaScript中,方法主要是通过对象属性引用的函数。(更新:从ES2015开始,如果您使用方法语法来创建它们,它们的数量会稍微多一些,因为它们可以访问super) JavaScript中的构造函数是通过new操作符调用的函数。尽管其他函数
super
)
JavaScript中的构造函数是通过new
操作符调用的函数。尽管其他函数可能会创建一些东西,但为了避免混淆,我们通常不将它们称为“构造函数”。有时,它们可能是“创建者”或“生成器”函数
它来自哪里
ExpressJS是一个express
是模块的名称,也是我们通常给变量的名称,该变量用于在代码中引用其主要功能,如您引用的代码。NodeJS提供了,其任务是加载模块并允许您访问其导出。(您不必调用变量express
,您可以执行var foo=require('express');
并使用foo
,但惯例是使用模块名称,或者如果只使用模块的一部分,则使用模块文档定义的该部分名称。)
express
的默认导出有点不寻常,因为它是一个函数,其属性也是函数(方法)。这在JavaScript中完全有效,但在其他一些语言中却相当罕见。这就是为什么您可以通过express()
创建应用程序
对象,但也可以使用express.static(/*…*/)
设置服务静态文件
事实上,这是完全正常的。默认情况下,函数有两种标准方法:
调用
,应用
,以及到字符串
。您将使用节点的require函数来使用express模块。require类似于其他语言中的import或include等关键字。require将包的名称作为字符串参数并返回包。返回的对象没有什么特别之处—它通常是一个对象,但可以是函数、字符串或数字
var express = require('express');
var app = express();
=>需要Express模块,就像您需要其他模块一样,并将其放入变量中
var express = require('express');
=>调用express函数“express()”并将新的express应用程序放入app变量中(以启动新的express应用程序)。
这就像是在创建一个类的对象。其中“express()”与类类似,而app是它新创建的对象
通过查看下面的express代码,您可以很好地了解内部正在发生的事情
文件1:index.js
var app = express();
文件2:lib/express.js
'use strict';
module.exports = require('./lib/express');
require如何工作
当您在节点中调用require('some_module')时,会发生以下情况:
此循环重复,直到节点到达文件系统的根文件夹,此时它将检查任何全局模块文件夹(例如Mac OS上的/usr/local/node_模块),如果仍然找不到某个_模块,它将抛出异常。。我认为最初的海报对调用module express导出的函数的语法为何不正确感到困惑
'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;
});
而不是
var app = express()
澄清一下:require()函数不会创建对该“模块”的引用。没有对模块的引用。只有对模块导出的对象的引用
require('xxx.js'),其中可以省略.js扩展名,返回该xxx.js文件导出的内容。如果xxx.js文件导出一个对象,require('xxx.js')将返回一个对象;如果导出一个函数,require('xxx.js')返回一个函数;如果导出单个字符串,require('xxx.js')将返回一个字符串
如果您检查文件express.js的源代码,您将看到它导出一个函数。所以在
var app = express.express()
第一个express被分配模块express导出的任何内容,在本例中,模块express恰好是一个函数。express是一个函数,而不是对模块的引用。因此,在第二行,您只需调用该函数:
var express = require('express')
希望这有帮助 让我举个例子来回答这个问题。 创建2个javascript文件。 play1.js和express.js
var app = express()
现在在play1.js文件中导入express.js
//express.js
function createApplication(){
var app = 'app';
return app;
}
module.exports = createApplication;
//keep in mind that we are not doing module.exports = {createApplication}
无论何时导入模块,如
//play1.js
var express = require('./express);
var app = express();
// this will call createApplication function as app is referencing to it.
console.log(app); // "app"
express是一个模块,它具有分配给它的函数、对象或变量。
看看/lib/express
您可以在express模块中以express()的形式访问函数createApplication,因为该函数直接分配给模块,如
//play1.js
var express = require('./express);
var app = express();
// this will call createApplication function as app is referencing to it.
console.log(app); // "app"
导出=模块。导出=创建应用程序
因此,您可以访问函数createApplication,只需将express()作为函数调用即可
现在,当您查看express库的其他部分时,您可以看到附加到exports特殊对象的一组其他对象
function createApplication(){
var app = function(req, res, next) {
app.handle(req, res, next);
};
//other codes
}
指定用于导出特殊对象的这些对象或函数可以使用express作为对象从导入部分访问
express.{name}
最后,您只需导出一组附加到模块的方法或对象。export express js文件中的特殊对象
要阅读有关module.export特殊对象的更多信息,请转到
首先
/**
* Expose the prototypes.
*/
exports.application = proto;
exports.request = req;
exports.response = res;
/**
* Expose constructors.
*/
exports.Route = Route;
exports.Router = Router;
// other exports
express.Route
express.Router etc
1- var express = require('express');
2- var app = express();
const modue_need1=require('module_name');
const modue_need2=require('module_name2');
const modue_need3=require('module_name3');
const modue_need4=require('module_name4');
const modue_need....=require('module_name.....');
const express=require('express');
const app=express();
console.log(app);