Var express = require ('express'); var app = express(), Что такое express()?? это метод или конструктор? От куда это

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

Вот как мы создаем экспресс-приложение. Но что это за "экспресс()"? Это метод или конструктор? Откуда она взялась?

Ответ 1

  Это метод или конструктор?

Ни; это функция, хотя, если бы вы сказали "метод", я не думаю, что кто-то доставит вам неприятности.

Метод - это функция, прикрепленная к объекту. В JavaScript методы - это просто в основном функции, на которые вы ссылаетесь через свойства объекта. (Обновление: по состоянию на ES2015, если вы используете синтаксис методов для их создания, они немного больше, чем у них, потому что у них есть доступ к super.)

Конструктор в JavaScript - это функция, которую вы вызываете с помощью оператора new. Даже если другие функции могут создавать вещи, мы обычно не называем их "конструкторами", чтобы избежать путаницы. Иногда они могут быть функциями "создателя" или "создателя".

Откуда это?

ExpressJS - это модуль NodeJS; express - это имя модуля, а также имя, которое мы обычно даем переменной, которую мы используем для ссылки на ее основную функцию в коде, таком как то, что вы цитировали. NodeJS предоставляет функцию require, задачей которой является загрузка модулей и предоставление вам доступа к их экспорту. (Вам не нужно вызывать переменную express, вы можете сделать var foo = require('express'); и использовать вместо него foo, но соглашение состоит в том, что вы будете использовать имя модуля или, если используете только одну часть модуля, для используйте имя этой части, как определено в документации модуля.)

Ответ 2

Вы можете использовать Node для использования экспресс-модуля. require аналогичен ключевым словам, таким как импорт или включение на другие языки. require принимает имя пакета как строковый аргумент и возвращает пакет. Нет ничего особенного в возвращенном объекте - часто это объект, но он может быть функцией или строкой или числом.

var express = require('express'); 

= > Требуется модуль Express так же, как вам нужны другие модули, и помещает его в переменную.

var app = express(); 

= > Вызывает экспресс-функцию "express()" и помещает новое приложение Express внутри переменной приложения (для запуска нового приложения Express). Это похоже на то, что вы создаете объект класса. Где "express()" точно так же, как класс и приложение, это вновь созданный объект.

Посмотрев код экспресса ниже, вы хорошо пойдете, что действительно происходит внутри.

Файл 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') в node, вот что происходит:

  • если файл с именем some_module.js существует в текущей папке node будет загружать это, в противном случае:

  • Node просматривает текущую папку для папки node_modules с папкой some_module в ней.

  • Если он не найдет его, он пойдет вверх по одной папке и повторит шаг 2

Этот цикл повторяется до тех пор, пока node не достигнет корневой папки файловой системы, после чего он проверит все глобальные папки модулей (например,/usr/local/node_modules в Mac OS), и если он все еще не найдите some_module, он выдает исключение.

Ответ 3

Древний пост. Я думаю, что оригинальный постер был озадачен тем, почему синтаксис для вызова функции, экспортируемой модулем express, является

var app = express() 

вместо

var app = express.express()

Чтобы уточнить: функция require() не создает ссылку на этот "модуль". Нет такой вещи как ссылка на модуль. Там только ссылки на вещи, экспортируемые модулем.

require ('xxx.js'), где расширение .js может быть опущено, возвращает все, что экспортируется этим файлом xxx.js. Если этот файл xxx.js экспортирует объект, require ('xxx.js') возвращает объект; если функция экспортируется, require ('xxx.js') возвращает функцию; если экспортируется одна строка, require ('xxx.js') возвращает строку...

Если вы проверите исходный код файла express.js, вы увидите, что он экспортирует одну функцию. Так что в

var express = require('express')

Первому экспрессу присваивается то, что экспортируется модулем экспресс, который в этом случае оказывается единственной функцией. Экспресс - это функция, а не ссылка на модуль. Следовательно, во второй строке вы просто вызываете эту функцию:

var app = express()

Надеюсь, это поможет!

Ответ 4

позвольте мне ответить на этот вопрос на примере. создать 2 файла JavaScript. 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}

теперь импортируйте express.js в файл play1.js

//play1.js
  var express = require('./express);
   var app = express();
 // this will call createApplication function as app is referencing to it.
   console.log(app); // "app"

Ответ 5

Всякий раз, когда вы импортируете такой модуль, как

const express = require('express')

express - это модуль с назначенными ему функциями, объектами или переменными. взгляните на /lib/express

вы можете получить доступ к функции createApplication внутри экспресс-модуля как express(), поскольку функция назначается непосредственно модулю, например

.

exports = module.exports = createApplication;

function createApplication(){
    var app = function(req, res, next) {
    app.handle(req, res, next);
  };
//other codes
}

так что вы можете получить доступ к функции createApplication, просто вызвав express() как функцию

теперь, когда вы просматриваете другой раздел экспресс-библиотеки, вы также можете увидеть кучу других объектов, прикрепленных к специальному объекту экспорта.

/**
 * Expose the prototypes.
 */

exports.application = proto;
exports.request = req;
exports.response = res;

/**
 * Expose constructors.
 */

exports.Route = Route;
exports.Router = Router;

 // other exports

к этим объектам или функциям, назначенным для экспорта специального объекта, можно получить доступ из раздела импорта, используя Express в качестве объекта.

express.{name}

express.Route
express.Router etc

В конце вы просто экспортируете набор методов или объектов, которые прикреплены к специальному объекту module.export в файле экспресс-js

подробнее о специальном объекте module.export читайте здесь here