2016-08-08 20 views
0

Ich habe die express-generator Npm verwendet, um ein Muster für eine MEAN Stack App zu erstellen, und es funktionierte perfekt, aber ich habe den Zweck einiger Dateien nicht verstanden.MEAN Stack App Struktur

Zum Beispiel:

Die package.json den folgenden Code enthalten:

"script":{"start": "node ./bin/www"} 

Die App ein Ordner bin genannt enthalten, die eine Datei www genannt enthalten, die den folgenden Code enthalten:

#!/usr/bin/env node 

/** 
* Module dependencies. 
*/ 

var app = require('../app'); 
var debug = require('debug')('myapp:server'); 
var http = require('http'); 


    var port = normalizePort(process.env.PORT || '3000'); 
    app.set('port', port); 

    var server = http.createServer(app); 

    server.listen(port); 
    server.on('error', onError); 
    server.on('listening', onListening); 

    function normalizePort(val) { 
    var port = parseInt(val, 10); 

    if (isNaN(port)) { 
     // named pipe 
      return val; 
    } 

    if (port >= 0) { 
     // port number 
     return port; 
     } 

     return false; 
    } 

    function onError(error) { 
    if (error.syscall !== 'listen') { 
     throw error; 
    } 

    var bind = typeof port === 'string' ? 
    'Pipe ' + port : 
    'Port ' + port; 

    // handle specific listen errors with friendly messages 
     switch (error.code) { 
     case 'EACCES': 
     console.error(bind + ' requires elevated privileges'); 
     process.exit(1); 
     break; 
     case 'EADDRINUSE': 
     console.error(bind + ' is already in use'); 
     process.exit(1); 
     break; 
     default: 
     throw error; 
    } 
    } 

function onListening() { 
    var addr = server.address(); 
    var bind = typeof addr === 'string' ? 
    'pipe ' + addr : 
    'port ' + addr.port; 
     debug('Listening on ' + bind); 
    } 

Jetzt bin ich nicht sicher w Hüte dies den Zweck, weil ich all diesen Code oben entnommen und Datei folgende Zeilen in meinem app.js wo mein Server ist:

var port = process.env.PORT || 8080; 
app.listen(port); 
console.log("Listening on port " + port) 

Durch die Zusammenarbeit mit nur zwei Zeilen all diesen Code ersetzen zu konnte ich Führen Sie den Server aus und zeigen Sie mithilfe von Routen eine Ansicht an. Das ist, wie ich alle meine Node/Express-Apps für eine Weile entwickelt habe und sie haben gut funktioniert.

Kann jemand erklären, was der Punkt dieses Codes war, weil ich nicht sicher bin, was es tut? Und warum sollte es nötig sein, wenn wir es einfach durch 2 Zeilen ersetzen können? Es scheint nur sehr verwirrend und unnötig.

Antwort

1

Innerhalb Ihrer package.json Datei teilt die Zeile "script":{"start": "node ./bin/www"} dem Knoten mit, wo Sie Ihre Anwendung starten sollen.

Der entfernte Code enthält eine Fehlerüberprüfung und überprüft, ob der Server einen normalisierten Port überwacht und ausgeführt wird.

Die Zeile: server.on('error', onError); erstellt einen Ereignis-Listener, der an die onError-Methode gebunden ist. Wenn ein Fehler erkannt wird, wird die onError()-Methode aufgerufen und ausgeführt, wodurch der Fehler ausgelöst wird.

In ähnlicher Weise erstellt die server.on('listening', onListening); einen Ereignis-Listener, der an die onListening-Methode gebunden ist. Wenn der Server tatsächlich einen normalisierten Port überwacht, wird die Methode onListening() aufgerufen und ausgeführt.

Der große Unterschied zwischen dem generierten Code und Ihrem Code besteht darin, dass er die Fehlerbehandlung ermöglicht, während Ihr Fehler nicht auftritt. Fehlerbehandlung ist absolut notwendig und sollte nicht entfernt werden, wenn Sie Ihr Projekt in eine Live-Umgebung schieben wollen.

Es bietet eine Möglichkeit für Sie Anwendung, um Ihnen bessere Fehlerinformationen (Unterstützung bei der Problemlösung/Debugging), und Probleme zu behandeln, ohne vollständig auseinander fallen. Wenn Ihre Anwendung nicht hochfährt oder abstürzt, Sie aber keine Fehlerbehandlung oder Berichterstellung integriert haben, kann es manchmal mühsam sein, das Problem zu finden.

+0

Vielen Dank. das hilft sehr. Kannst du erklären, was es mit 'normalized port' bedeutet? – Skywalker

+0

@LorenzovonMatterhorn Die Normalisierung eines Ports bedeutet, dass die Anwendung überprüft, ob der Portwert sowohl ein * realer * numerischer Wert als auch ** ist, und dieser Wert größer als Null ist. Dies ist eine zusätzliche Validierungsebene, um sicherzustellen, dass Ihre Anwendung den angegebenen Port überwachen kann. –

+0

Vielen Dank.Ich werde definitiv diese Technik von nun an verwenden, da es wie ein Best Practice aussieht. Obwohl die einzige Sache, die ich nicht mag, ist, wie die App anfängt. Ich muss 'npm start' verwenden, während ich die' nodemon app.js' Technik wirklich geniesse. – Skywalker