expresso = requer('expresso')

Feb 01 2023
É assim que o processo funciona enquanto eu tentava entender o que estava acontecendo nos bastidores dessa declaração. Agora, vamos dar uma olhada na caixa ;) vamos primeiro começar sabendo o que é realmente expresso em require.
Foto de Kelli McClintock no Unsplash

É assim que o processo funciona enquanto eu tentava entender o que estava acontecendo nos bastidores dessa declaração. Agora, vamos dar uma olhada na caixa ;)

vamos começar sabendo o que realmente é expresso em require .

express é o pacote de estrutura que você instalou quando usou:

npm istall express

Como você vê aqui, temos algumas funções definidas e outras coisas, e lá estamos exportando algumas coisas, incluindo funções.

você não sabe o que significa exportar?

Exportar aqui é como exportar mercadorias na vida real, você está apenas movendo coisas para outro lugar para poder usá-las lá;

OK?

Em JS você pode exportar funções, propriedades e outras coisas para outro arquivo usando:

module.exports = (stuff you want to export)

Em um arquivo.js temos esta função sayHi:

// a.js

const sayHi = () => { return 'Hi' }

Ao adicionar a linha que afirmamos acima, que é:

// a.js

module.exports = sayHi

// a.js

const sayHi = () => { return 'Hi' }
module.exports = sayHi

Não, devemos importá-lo, para poder usar! é lógica.

mas como então?

Usando a linha abaixo. É expressivo: nós precisamos desse módulo então nós o exigimos.

require(module location);

// b.js

const sayHi = require('./a.js');

Agora, temos uma referência para a função e podemos chamá-la adicionando () à referência;

// b.js
const sayHi = require('./a.js');
console.log( sayHi() ) //output: Hi

podemos ver isso:

//express.js module

exports = module.exports = createApplication;

//express.js module 

exports.static = require('serve-static');
exports.json = bodyParser.json
exports.query = require('./middleware/query');
exports.raw = bodyParser.raw

exports aqui é apenas uma referência a module.exports para que, em vez de dizer module.exports.json, você possa usar apenas este atalho diretamente exports.json.

Tudo bem?

vamos ao arquivo app.js onde criamos nosso servidor e adicionamos alguns roteamentos, precisamos agora ver apenas a primeira linha:

// app.js

const express = require('express')

vamos tentar logá-lo:

// app.js

const express = require('express')

console.log(express)


[Function: createApplication] {
 application: {
 init: [Function: init],
 defaultConfiguration: [Function: defaultConfiguration],
 lazyrouter: [Function: lazyrouter],
 handle: [Function: handle],
 use: [Function: use],
 route: [Function: route],
 engine: [Function: engine],
 param: [Function: param],
 set: [Function: set],
 path: [Function: path],
 enabled: [Function: enabled],
 disabled: [Function: disabled],
 enable: [Function: enable],
 disable: [Function: disable],
 acl: [Function (anonymous)],
 bind: [Function (anonymous)],
 checkout: [Function (anonymous)],
 connect: [Function (anonymous)],
 copy: [Function (anonymous)],
 delete: [Function (anonymous)],
 get: [Function (anonymous)],
 head: [Function (anonymous)],
 link: [Function (anonymous)],
 lock: [Function (anonymous)],
 'm-search': [Function (anonymous)],
 merge: [Function (anonymous)],
 mkactivity: [Function (anonymous)],
 mkcalendar: [Function (anonymous)],
 mkcol: [Function (anonymous)],
 move: [Function (anonymous)],
 notify: [Function (anonymous)],
 options: [Function (anonymous)],
 patch: [Function (anonymous)],
 post: [Function (anonymous)],
 propfind: [Function (anonymous)],
 proppatch: [Function (anonymous)],
 purge: [Function (anonymous)],
 put: [Function (anonymous)],
 rebind: [Function (anonymous)],
 report: [Function (anonymous)],
 search: [Function (anonymous)],
 source: [Function (anonymous)],
 subscribe: [Function (anonymous)],
 trace: [Function (anonymous)],
 unbind: [Function (anonymous)],
 unlink: [Function (anonymous)],
 unlock: [Function (anonymous)],
 unsubscribe: [Function (anonymous)],
 all: [Function: all],
 del: [Function (anonymous)],
 render: [Function: render],
 listen: [Function: listen]
 },
 request: IncomingMessage {
 header: [Function: header],
 get: [Function: header],
 accepts: [Function (anonymous)],
 acceptsEncodings: [Function (anonymous)],
 acceptsEncoding: [Function (anonymous)],
 acceptsCharsets: [Function (anonymous)],
 acceptsCharset: [Function (anonymous)],
 acceptsLanguages: [Function (anonymous)],
 acceptsLanguage: [Function (anonymous)],
 range: [Function: range],
 param: [Function: param],
 is: [Function: is],
 protocol: [Getter],
 secure: [Getter],
 ip: [Getter],
 ips: [Getter],
 subdomains: [Getter],
 path: [Getter],
 hostname: [Getter],
 host: [Getter],
 fresh: [Getter],
 stale: [Getter],
 xhr: [Getter]
 },
 response: ServerResponse {
 status: [Function: status],
 links: [Function (anonymous)],
 send: [Function: send],
 json: [Function: json],
 jsonp: [Function: jsonp],
 sendStatus: [Function: sendStatus],
 sendFile: [Function: sendFile],
 sendfile: [Function (anonymous)],
 download: [Function: download],
 type: [Function: contentType],
 contentType: [Function: contentType],
 format: [Function (anonymous)],
 attachment: [Function: attachment],
 append: [Function: append],
 header: [Function: header],
 set: [Function: header],
 get: [Function (anonymous)],
 clearCookie: [Function: clearCookie],
 cookie: [Function (anonymous)],
 location: [Function: location],
 redirect: [Function: redirect],
 vary: [Function (anonymous)],
 render: [Function: render]
 },
 Route: [Function: Route],
 Router: [Function (anonymous)] {
 param: [Function: param],
 handle: [Function: handle],
 process_params: [Function: process_params],
 use: [Function: use],
 route: [Function: route],
 acl: [Function (anonymous)],
 bind: [Function (anonymous)],
 checkout: [Function (anonymous)],
 connect: [Function (anonymous)],
 copy: [Function (anonymous)],
 delete: [Function (anonymous)],
 get: [Function (anonymous)],
 head: [Function (anonymous)],
 link: [Function (anonymous)],
 lock: [Function (anonymous)],
 'm-search': [Function (anonymous)],
 merge: [Function (anonymous)],
 mkactivity: [Function (anonymous)],
 mkcalendar: [Function (anonymous)],
 mkcol: [Function (anonymous)],
 move: [Function (anonymous)],
 notify: [Function (anonymous)],
 options: [Function (anonymous)],
 patch: [Function (anonymous)],
 post: [Function (anonymous)],
 propfind: [Function (anonymous)],
 proppatch: [Function (anonymous)],
 purge: [Function (anonymous)],
 put: [Function (anonymous)],
 rebind: [Function (anonymous)],
 report: [Function (anonymous)],
 search: [Function (anonymous)],
 source: [Function (anonymous)],
 subscribe: [Function (anonymous)],
 trace: [Function (anonymous)],
 unbind: [Function (anonymous)],
 unlink: [Function (anonymous)],
 unlock: [Function (anonymous)],
 unsubscribe: [Function (anonymous)],
 all: [Function (anonymous)]
 },
 json: [Function: json],
 query: [Function: query],
 raw: [Function: raw],
 static: [Function: serveStatic] {
 mime: Mime {
 types: [Object: null prototype],
 extensions: [Object: null prototype],
 default_type: 'application/octet-stream',
 Mime: [Function: Mime],
 charsets: [Object]
 }
 },
 text: [Function: text],
 urlencoded: [Function: urlencoded]
}

É createApplication, então o que foi retornado é na verdade a referência ao createApplication();

Você pode estar perguntando como eu, antes que eu entendesse!

onde estão as outras exportações que vimos acima assim! :

// express.js module

exports.static = require('serve-static');
exports.json = bodyParser.json
exports.query = require('./middleware/query');
exports.raw = bodyParser.raw

Então o que está acontecendo aqui?

É tudo sobre funções se comportando em JS, se comporta como um objeto;)

quando você usou isso:

exports = module.exports = createApplication;

exports.static = require('serve-static');
exports.json = bodyParser.json
exports.query = require('./middleware/query');
exports.raw = bodyParser.raw

exports = module.exports = createApplication;

createApplication.static = require(‘serve-static’);

__

Dê uma olhada neste trecho e teste-se perguntando o que é equivalente expresso em cada linha abaixo:

// app.js

const express = require('express')
const app = express();
app.use(express.static('public'))

finalizado? agora vamos lá:

Na primeira linha: solicitamos o módulo que retornou uma referência createApplication que inclui outras propriedades e armazenou essa referência em express constant;

Na segunda linha: chamamos essa função expressa adicionando () à referência expressa e essa função (createApplication) retorna o objeto do aplicativo que armazenamos na constante do aplicativo.

Na terceira linha: usamos express constant que se refere à função createApplication que tem algumas propriedades como a função estática que chamamos aqui.

Agora terminei...