ekspres = wymagaj („ekspres”)

Feb 01 2023
Tak działa ten proces, gdy próbowałem zrozumieć, co działo się za kulisami tego stwierdzenia. A teraz spójrzmy na pudełko ;) Zacznijmy od tego, co tak naprawdę jest express w wymaganiach.
Zdjęcie Kelli McClintock na Unsplash

Tak działa ten proces, gdy próbowałem zrozumieć, co działo się za kulisami tego stwierdzenia. A teraz zajrzyjmy do pudełka ;)

zacznijmy od poznania, co tak naprawdę jest wyrażone w require .

express to pakiet ramowy, który zainstalowałeś, gdy użyłeś:

npm istall express

Jak widać tutaj, mamy zdefiniowane funkcje i inne rzeczy, a tam eksportujemy niektóre rzeczy, w tym funkcje.

nie wiesz co to znaczy eksport?

Eksport tutaj jest jak eksport towarów w prawdziwym życiu, po prostu przenosisz rzeczy w inne miejsce, aby móc je tam wykorzystać;

OK?

W JS możesz eksportować funkcje, właściwości i inne rzeczy do innego pliku za pomocą:

module.exports = (stuff you want to export)

W pliku a.js mamy taką funkcję sayHi:

// a.js

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

Dodając tę ​​linię, którą podaliśmy powyżej, która brzmi:

// a.js

module.exports = sayHi

// a.js

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

Nie, musimy go zaimportować, aby móc z niego korzystać! to logika.

ale jak wtedy?

Korzystając z poniższej linii. Jest wyrazisty: potrzebujemy tego modułu, więc go potrzebujemy.

require(module location);

// b.js

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

Teraz mamy odwołanie do funkcji i możemy ją wywołać, dodając () do odwołania;

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

możemy zobaczyć to:

//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 tutaj jest tylko odniesieniem do module.exports, więc zamiast mówić module.exports.json możesz po prostu użyć tego skrótu bezpośrednio exports.json.

W porządku?

przejdźmy do pliku app.js , w którym stworzyliśmy nasz serwer i dodaliśmy trochę routingu, teraz musimy zobaczyć tylko pierwszą linię:

// app.js

const express = require('express')

spróbujmy to zarejestrować:

// 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]
}

Jest to createApplication, więc to, co zostało zwrócone, jest w rzeczywistości odwołaniem do funkcji createApplication();

Być może pytasz tak jak ja, zanim zrozumiałem!

gdzie są inne eksporty, które widzieliśmy powyżej! :

// express.js module

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

więc co tu się dzieje?

Chodzi o funkcje zachowujące się w JS, Zachowuje się jak obiekt ;)

kiedy użyłeś tego:

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

__

Spójrz na ten fragment i sprawdź się, pytając, co jest ekspresowym odpowiednikiem w każdym wierszu poniżej:

// app.js

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

skończone? teraz chodźmy:

W pierwszym wierszu: wymagaliśmy modułu, który zwrócił odwołanie do createApplication, które zawiera inne właściwości i zapisał to odwołanie w stałej express;

W drugim wierszu: wywołaliśmy tę funkcję express, dodając () do referencji express i ta funkcja (createApplication) zwraca obiekt aplikacji, który przechowywaliśmy w stałej aplikacji.

W trzecim wierszu: użyliśmy stałej ekspresowej, która odnosi się do funkcji createApplication, która ma pewne właściwości, takie jak funkcja statyczna, którą tutaj wywołaliśmy.

Teraz skończyłem…