express = require('express')

Feb 01 2023
Ecco come funziona il processo mentre cercavo di capire cosa stava succedendo dietro le quinte di questa dichiarazione. Ora, diamo un'occhiata alla casella ;) iniziamo prima con il sapere cosa è effettivamente espresso in require.
Foto di Kelli McClintock su Unsplash

Ecco come funziona il processo mentre cercavo di capire cosa stava succedendo dietro le quinte di questa dichiarazione. Ora diamo un'occhiata alla scatola ;)

iniziamo prima conoscendo cosa è effettivamente espresso in require .

express è il pacchetto framework che hai installato quando hai usato:

npm istall express

Come vedi qui abbiamo alcune funzioni definite e altre cose, e lì stiamo esportando alcune cose incluse le funzioni.

non sai cosa si intende per esportazione?

Esportare qui è come esportare merci nella vita reale, stai solo spostando le cose in un altro posto per poterle usare lì;

OK?

In JS puoi esportare funzioni, proprietà e altre cose in un altro file usando:

module.exports = (stuff you want to export)

In un file.js abbiamo questa funzione sayHi:

// a.js

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

Aggiungendo quella riga che abbiamo detto sopra che è:

// a.js

module.exports = sayHi

// a.js

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

No, dobbiamo importarlo, per poterlo usare! è logica.

ma come allora?

Utilizzando la riga sottostante. È espressivo: abbiamo bisogno di quel modulo quindi lo richiediamo.

require(module location);

// b.js

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

Ora abbiamo un riferimento alla funzione e possiamo chiamarlo aggiungendo () al riferimento;

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

possiamo vedere questo:

//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 qui è solo un riferimento a module.exports in modo che invece di dire module.exports.json puoi solo questa scorciatoia exports.json.

Bene?

andiamo al file app.js dove abbiamo creato il nostro server e aggiunto un po' di routing, ora dobbiamo vedere solo la prima riga:

// app.js

const express = require('express')

proviamo a loggarlo:

// 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, quindi ciò che è stato restituito è in realtà il riferimento a createApplication();

Forse ti starai chiedendo come me, prima che capissi!

dove sono le altre esportazioni che abbiamo visto sopra così! :

// express.js module

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

quindi cosa sta succedendo qui?

Riguarda le funzioni che si comportano in JS, si comporta come un oggetto;)

quando hai usato questo:

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’);

__

Dai un'occhiata a questo frammento e mettiti alla prova chiedendo a cosa è espresso equivalente in ciascuna riga di seguito:

// app.js

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

finito? Ora andiamo:

Alla prima riga: abbiamo richiesto il modulo che ha restituito un riferimento createApplication che include altre proprietà e ha memorizzato quel riferimento a express constant;

Alla seconda riga: abbiamo chiamato questa funzione express aggiungendo () al riferimento express e quella funzione (createApplication) restituisce l'oggetto app che abbiamo memorizzato in app constant.

Alla terza riga: abbiamo usato la costante espressa che fa riferimento alla funzione createApplication che ha alcune proprietà come la funzione statica che abbiamo chiamato qui.

Ora, ho finito...