Saltar al contenido

var expreso = require(‘expreso’); var app = express(), ¿Qué es express()? ¿Es un método o un constructor? De dónde viene

Comprende el código correctamente previamente a aplicarlo a tu trabajo si ttienes algo que aportar puedes compartirlo con nosotros.

Solución:

¿Es un método o un constructor?

Ninguno de los dos; es un funciónaunque si dices “método” no creo que nadie te haga pasar un mal rato.

A método es una función adjunta a un objeto. En JavaScript, los métodos son sólo en su mayoría funciones a las que hace referencia a través de las propiedades del objeto. (Actualización: a partir de ES2015, si usa la sintaxis de método para crearlos, son levemente más que eso porque tienen acceso a super.)

A constructoren JavaScript, es una función a la que llama a través de la new operador. Aunque otras funciones pueden crear cosas, normalmente no las llamamos “constructores” para evitar confusiones. A veces pueden ser funciones de “creador” o “constructor”.

¿De dónde viene?

ExpressJS es un módulo de NodeJS; express es el nombre del módulo, y también el nombre que normalmente le damos a la variable que usamos para referirnos a su función principal en código como el que citaste. NodeJS proporciona la require función, cuyo trabajo es cargar módulos y darle acceso a sus exportaciones. (Tu no tener llamar a la variable expresstu puedes hacer var foo = require('express'); y use foo en cambio, pero la convención es que usaría el nombre del módulo, o si solo usa una parte de un módulo, use el nombre de esa parte como se define en la documentación del módulo).

Usará la función require de Node para usar el módulo express. require es similar a palabras clave como import o include en otros idiomas. require toma el nombre de un paquete como string argumento y devuelve un paquete. No hay nada especial en el objeto que se devuelve; a menudo es un objeto, pero podría ser una función o un string o un número.

var express = require('express'); 

=> Requiere el módulo Express al igual que requiere otros módulos y lo pone en una variable.

var app = express(); 

=> Llama a la función express “express()” y coloca la nueva aplicación Express dentro de la variable de la aplicación (para iniciar una nueva aplicación Express). Es algo así como si estuvieras creando un objeto de una clase. Donde “express ()” es como la clase y la aplicación es su objeto recién creado.

Al mirar el código de express a continuación, está listo para ver lo que realmente está sucediendo dentro.

Archivo 1: index.js

'use strict';

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

Archivo 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;
});

¿Cómo requieren obras

Cuando llamas a require(‘some_module’) en el nodo, esto es lo que sucede:

  1. si existe un archivo llamado some_module.js en la carpeta actual, el nodo lo cargará, de lo contrario:

  2. Node busca en la carpeta actual una carpeta node_modules con una carpeta some_module en ella.

  3. Si no lo encuentra, subirá una carpeta y repetirá el paso 2

Este ciclo se repite hasta que el nodo llega a la carpeta raíz del sistema de archivos, momento en el que verificará las carpetas de módulos globales (p. ej., /usr/local/node_modules en Mac OS) y, si aún no encuentra algún_módulo, generará una excepción. .

Poste antiguo. Creo que el cartel original estaba confundido acerca de por qué la sintaxis para llamar a la función exportada por module express es

var app = express() 

en lugar de

var app = express.express()

Para aclarar: la función require() no crea una referencia a ese ‘módulo’. No existe tal cosa como una referencia a un módulo. Solo hay una referencia a las cosas exportadas por un módulo.

require(‘xxx.js’), donde se puede omitir la extensión .js, devuelve todo lo exportado por ese archivo xxx.js. Si ese archivo xxx.js exporta un objeto, require(‘xxx.js’) devuelve un objeto; si se exporta una función, require(‘xxx.js’) devuelve una función; si uno solo string se exporta, require(‘xxx.js’) devuelve un string…

Si revisa el código fuente del archivo express.js, verá que exporta una sola función. así que en

var express = require('express')

Al primer express se le asigna lo que sea exportado por module express, que en este caso resulta ser una sola función. express es una función, no una referencia a un módulo. Por lo tanto, en la segunda fila, simplemente invoca esa función:

var app = express()

¡Espero que esto ayude!

Recuerda algo, que te brindamos la opción de glosar si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *