Come creare un framework in Express.js

1

Sto cercando di capire come creare un'applicazione Node.js / Express.js che sia un framework per l'hosting e l'esecuzione di codice di terze parti nella mia applicazione, e quali sono i termini JavaScript / Node / Express appropriati per questi concetti se sono diversi dalle altre lingue che ho usato in passato (C ++ / C # / Java).

Nello sviluppo del back-end per un'app per Android / iOS utilizzando alcune o tutte le tecnologie MEAN - almeno Express.js e Node.js - Ricevo i requisiti per configurarlo come framework, quindi le terze parti può codificare su un'API pubblicata per sviluppare plug-in / moduli per il mio back-end che potrei aver eseguito su qualche server da qualche parte.

Questa parte potrebbe essere esternalizzata a qualcun altro, nel qual caso sarei responsabile di garantire che io comunichi accuratamente i requisiti al cessionario.

Sono relativamente nuovo a Node ed Express e ho difficoltà a trovare informazioni su come scrivere codice per questo se dovessi farlo da solo. Quando provo a cercare informazioni su come creare ciò che ho descritto sopra, finisco per ricevere hit per Express stesso o Node stesso. Cercando "Express" e "framework", fondamentalmente ottengo informazioni su Express stesso poiché Express.js è un framework; Allo stesso modo, la ricerca di "Node" e "moduli" mi dà solo un sacco di informazioni su NPM da quando NPM ospita i moduli Node.

Venendo da uno sfondo C ++ / C # / Java, immagino che questa applicazione utilizzerebbe l'equivalente di qualcosa come "dlopen" per aprire manualmente l'equivalente di un file .so, .dll o .jar, trovare una classe che implementa un'interfaccia prevista e quindi chiama i metodi su tale interfaccia.

Se uno sviluppatore di terze parti crea un modulo plug-in separato per l'esecuzione nella mia applicazione, la mia comprensione è che non esiste alcun concetto di DLL o JAR in JavaScript, quindi tutto ciò che è disponibile sarebbe un file js speciale.

Se ne ho dieci di questi o un centinaio di questi da numerosi sviluppatori di terze parti, in quanto proprietario del back-end, sarei responsabile dell'aggancio di ognuno di questi nella mia applicazione in modo che la mia applicazione venga eseguita con tutti questi - con l'utente finale potenzialmente abilitando / disabilitando / configurando zero o più di questi per il proprio account tramite la propria app?

Mi chiedo se dovrei tenere conto di tre casi separati per il codice esterno:

  1. Codice completamente affidabile sviluppato internamente, quindi nessuna protezione necessaria. Se non altro, questo sarebbe di aiuto per il debug, se necessario, in quanto uno strato di complessità può essere rimosso solo per entrare nel codice per farlo funzionare senza fronzoli.

  2. Codice non attendibile da una terza parte arbitraria, quindi potrebbe essere utile eseguirlo nel suo processo dedicato come minimo. Per quanto riguarda il codice mal progettato, potremmo voler eseguire i nostri moduli interni in questo ambiente in produzione in ogni caso solo per la stabilità, quindi se un modulo non funziona, non ci vuole l'intera applicazione Express.

  3. Codice ospitato in remoto. Potrebbe essere il caso in cui una terza parte potrebbe non voler fornire il loro codice JavaScript per l'esecuzione, oppure potrebbe voler sviluppare il proprio modulo in qualcosa di diverso da JavaScript. Se a loro è disponibile qualcosa come un'API REST e espongono un'API REST fissa, possono ospitare autonomamente il proprio codice e collegarsi al mio back-end con le chiamate al servizio web.

Ora mi sto chiedendo se il # 3 sarebbe la strada da percorrere anche per tutti i casi del # 1 e del # 2. Anche per il codice fidato, è sufficiente fornire la possibilità di inserire web hooks e alzare servizi separati, compartimentati, magari in contenitori Docker isolati sullo stesso host per un'interfaccia standardizzata, e non preoccuparsi nemmeno di "moduli" e "plug-in".

    
posta jia103 15.02.2018 - 04:38
fonte

1 risposta

1

If I have ten of these or a hundred of these from numerous third-party developers, as the owner of the back-end, would I be responsible for hooking each of these into my application so that my application runs with all of these (...).

In un certo senso. Ricorda che mentre un framework è simile a una libreria (entrambi forniscono alcune funzionalità di base, utilità, ecc.) È completamente una bestia diversa. Quando scrivi una biblioteca è il codice degli utenti che è responsabile:

function users_function(x) {
    yourlibrary.your_fn(x);
}

Quando scrivi un framework, è il tuo codice che è responsabile dell'esecuzione generale:

function users_function(x) {
    // do some interesting stuff...
}

YourFramework.register_module(users_function);

E gli utenti influiscono in modo esplicito sul flusso di controllo.

Un framework astrae uno scenario tipico per un dominio specifico, ad es. un'applicazione Web. Devi model quello scenario - definire come viene gestito sotto il tuo framework, quali passi sono eseguiti (e possibilmente in quale ordine), quali dati hai bisogno in input e quali dati fornisci come output ( se del caso). Dopo averlo fatto, consenti ai tuoi utenti di eseguire il plug-in in determinati punti fornendo un modo per registrare i moduli che hanno scritto: il tuo framework è responsabile di invocare questi blocchi di funzionalità forniti dall'utente in punti appropriati (un po 'come programmare un evento -Interfaccia guidata, solo qui tu sono la fonte degli eventi - potresti trovarlo illuminante per leggere la programmazione basata sugli eventi, in particolare scrivere i loop di eventi).

Quindi, per rispondere in modo sintetico alla tua domanda: no, non non sarai responsabile dell'aggancio di ciascun plug-in nel tuo framework (è il lavoro dell'utente), ma sarà responsabile di attivarli nei punti appropriati.

    
risposta data 15.02.2018 - 07:48
fonte

Leggi altre domande sui tag