首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >var express =需要量(‘express’);var app = express(),什么是express()??它是一个方法还是一个构造函数?它是从哪里来的

var express =需要量(‘express’);var app = express(),什么是express()??它是一个方法还是一个构造函数?它是从哪里来的
EN

Stack Overflow用户
提问于 2014-12-22 09:11:37
回答 6查看 49.7K关注 0票数 39
代码语言:javascript
运行
复制
var express = require('express'); 
var app = express();

我们就是这样创建一个快速应用程序的。但这是什么“快递()”?它是一个方法还是一个构造函数?它是从哪里来的??

EN

回答 6

Stack Overflow用户

发布于 2016-07-25 08:19:42

您将使用Node的require函数来使用express模块。要求类似于关键字,如导入或包含在其他语言中。require将包的名称作为字符串参数并返回包。返回的对象没有什么特别之处--它通常是一个对象,但它可以是一个函数、一个字符串或一个数字。

代码语言:javascript
运行
复制
var express = require('express'); 

=>需要Express模块,就像您需要其他模块一样,并将其放入变量中。

代码语言:javascript
运行
复制
var app = express(); 

=>调用express函数" Express ()“,并将新的Express应用程序放入app变量(以启动新的Express应用程序)。就像在创建类的对象一样。其中"express()“就像类,app是新创建的对象。

通过查看下面的特快专递代码,你就能很好地了解里面正在发生的事情。

文件1: index.js

代码语言:javascript
运行
复制
'use strict';

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

文件2:lib/press.js

代码语言:javascript
运行
复制
'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. 节点在当前文件夹中查找node_modules文件夹,其中包含一个some_module文件夹。
  3. 如果它找不到它,它将上升到一个文件夹中,并重复步骤2

这个循环一直重复,直到节点到达文件系统的根文件夹,这时它将检查任何全局模块文件夹(例如/usr/local/ node _node,在Mac上),如果它仍然找不到some_module,它将抛出一个异常。

票数 21
EN

Stack Overflow用户

发布于 2018-07-13 18:18:21

古老的柱子。我认为最初的招贴画搞不清楚为什么调用模块表达式导出的函数的语法是

代码语言:javascript
运行
复制
var app = express() 

而不是

代码语言:javascript
运行
复制
var app = express.express()

要澄清的是: require()函数不创建对该“模块”的引用。没有引用模块这样的东西。只有对模块导出的东西的引用。

xxx.js (‘.js’),其中可以省略.js扩展名,返回由该xxx.js文件导出的任何内容。如果该xxx.js文件导出一个对象,则require('xxx.js')返回一个对象;如果导出一个函数,require('xxx.js')返回一个函数;如果导出一个字符串,require('xxx.js')返回一个字符串.

如果您检查文件express.js的源代码,您将看到它导出了一个函数。所以在

代码语言:javascript
运行
复制
var express = require('express')

第一个表达式被分配给模块express导出的任何东西,在这种情况下,模块表达式恰好是一个函数。表达式是一个函数,而不是一个模块的引用。因此,在第二行,您只需调用该函数:

代码语言:javascript
运行
复制
var app = express()

希望这能有所帮助!

票数 15
EN

Stack Overflow用户

发布于 2018-09-02 14:00:11

让我举个例子来回答这个问题。创建2个javascript文件。play1.js和express.js

代码语言:javascript
运行
复制
//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文件中导入express.js

代码语言:javascript
运行
复制
//play1.js
  var express = require('./express);
   var app = express();
 // this will call createApplication function as app is referencing to it.
   console.log(app); // "app"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27599614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档