2016-12-20 5 views
0

私は急行とNodeJSに次のコードスニペットがあります
1)
宣言型との違いは何ですか?

const app = express(); 
app.use('/index', function(req, res){ 
    res.sendFile(INDEX); 
}) 
app.listen(portno); 

2)

const app = express() 
    .use('/index', (req, res) => res.sendFile(INDEX)) 
    .listen(portno); 

これら2つの違いは何ですか?
2番目の宣言の後にapp.useコマンドを使用できないのはなぜですか?また

は、なぜ次のコードは、第1のみを使用します

あなたの第2のケースで
const Socket = require('ws').Server; 
const server = new Socket({server: app}); 
server.on('connection', function(socket) { 
     console.log('New socket opened'); 
}); 

答えて

2

app変数がServerオブジェクトではなく、アプリの目的であるものをその中に.listen()リターンで終了します。したがって、後でapp.use()を間違ったことをappに割り当てようとすると、正しく動作しません。あなたはこのようなメソッドをチェーンするとき

があることに留意してください:

var x = a().b().c(); 

xは、チェーン内の最後の項目の戻り値を割り当てられて終わること。技術的には、a()が実行され、そこから返される値で.b()プロパティが実行され、それから戻り値が検索され、.c()メソッドが検索され、その戻り値が割り当てられますx

だから、とあなたのケースで:

const app = express().use(...).listen(...); 

app変数はServerオブジェクトではなく、app目的である.listen()からの戻り値が含まれます。そして、Serverオブジェクトには、それを使用しようとしていた.use()メソッドがありません。

あなたは代わりにこれらのいずれかを行うことができます:

const app = express().use(...) 
app.listen(...); 

または:

const app = express(); 
app.use(...).listen(...); 

けれども、あなたが実際にappserver変数の両方を保持する場合、ほとんどの人はちょうど行います。

const app = express(); 

// define various routes and middleware 
app.use(...); 
app.use(...); 
app.use(...); 

// start the server 
const server = app.listen(...); 
関連する問題