2016-08-08 4 views
0

MEAN Stackアプリケーション用の定型文を作成するのに、express-generator npmを使用しましたが、完全に機能しましたが、いくつかのファイルの目的を理解できませんでした。例えば平均スタックアプリケーション構造

は、以下のコードを含まpackage.json:

:アプリケーションフォルダは、以下のコードを含まwwwと呼ばれるファイルが含まれてbinと呼ば含ま
"script":{"start": "node ./bin/www"} 

#!/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); 
    } 

今すぐわからないw帽子本の目的は、私は上記のすべてのコードを削除し、私のサーバーがある私のapp.jsファイルに次の行を追加したので:私はすることができた唯一の二行ですべてそのコードを置き換えることによって

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

をサーバーを実行し、ルートを使用してビューを表示します。どのようにして私のノード/エクスプレスアプリをしばらく開発していて、うまく働いているのですか?

私はそれが何をしているのか分からないので、誰もそのコードのすべてのポイントを説明することができますか?そして、なぜそれを2行に置き換えることができるのであろうか?それはちょうど非常に混乱し、不要なようです。

答えて

1

package.jsonファイル内で、"script":{"start": "node ./bin/www"}行は、アプリケーションを起動する場所をノードに通知します。

削除したコードには、エラーチェックが含まれており、サーバーが正規化ポートでリッスンして実行中であることが検証されます。

行:server.on('error', onError);は、onErrorメソッドにバインドされたイベントリスナーを作成します。エラーが検出されると、onError()メソッドが呼び出されて実行され、エラーがスローされます。

同様に、server.on('listening', onListening);は、onListeningメソッドにバインドされたイベントリスナーを作成します。サーバーが実際に正規化されたポートでリッスンしているときは、onListening()メソッドが呼び出され、実行されます。

生成されたコードとコードの大きな違いは、エラー処理を提供することです。エラー処理はであり、プロジェクトをライブ環境にプッシュする場合は削除しないでください。

(問題解決/デバッグを支援する)のエラー情報をアプリケーションに提供し、問題が完全に解消されることなく処理する方法を提供します。アプリケーションが起動しなかったりクラッシュしたり、エラー処理やレポート機能が組み込まれていない場合は、問題が非常に面倒であることが時々判明する可能性があります。

+0

ありがとうございました。これは多くの助けになります。 '正規化されたポート'が何を意味するのか説明できますか? – Skywalker

+0

@LorenzovonMatterhornポートを正規化すると、ポート値が*実数*、**、**の値がゼロより大きいかどうかをアプリケーションが確認することを意味します。これは、アプリケーションが指定されたポートで待機する可能性があることを確認する追加の検証レイヤーです。 –

+0

ありがとうございます。ベスト・プラクティスのように思えるので、今後このテクニックを使用していきます。私が気に入らないことの1つは、アプリの起動方法です。私は 'nodemon app.js'テクニックを本当に楽しみながら' npm start'を使う必要があります。 – Skywalker

関連する問題