2017-09-02 58 views
1

假設我們使用express。爲什麼我們要使用回調是這樣的:更清晰的node.js回調

var port = process.env.PORT || 8080; 
app.listen(port, function(){ 
    console.log('Listenning: ' + port); 
}); 

,而不是這樣的:

var port = process.env.PORT || 8080; 
var onBegin = function() { 
    console.log('Listenning: ' + port); 
} 
app.listen(port, onBegin); 

這是一個必須?或者第二個可能會導致問題?我發現很多人使用內聯回調,但爲什麼他們不直接在其他塊或文件中定義所有回調?如果這是必須的,我可以在哪裏找到所有最佳實踐?例如,我找到了以下鏈接,但是你能推薦其他的東西嗎?像葡萄汁,基礎知識等

鏈接我發現: https://www.codementor.io/mattgoldspink/nodejs-best-practices-du1086jja

編輯:

這裏是另一個回調函數作爲變量我與參數使用:

var onGET = function(req, res) { 
    var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress; 
    console.log('User connected: ' + ip); 
    res.send('OK: ' + req.query.id); 
} 
app.get('*', onGET); 

回答

0

功能上沒有區別。您可能想要使用匿名函數,因爲它們可以更容易閱讀,從而使代碼在未來更易於維護。

在另一個塊或文件中定義回調是好的,但請注意scope

1

匿名回調通常顯示在教程和指南中,因爲它對初學者更容易理解。在開發實際應用程序時,它不起作用。

下面是一個實際路線的例子:

app.get('/user/', User.authenticate, User.getData); 

注意,這是多麼容易理解這種方式。另一種方式僅適用於指南和教程,對於實際應用,使用命名中間件


編輯:最後,它是你最好的理解。對於一次調用app.listen回調函數,您可以跳過命名它們。它看起來更具可讀性。

0

利用上述響應,

您可以讓它們分開,它仍然可以工作。

在更多汁的方式,如果你是在最新的版本上運行的NodeJS你可以寫在上面的代碼如下:

var port = process.env.PORT || 8080; 
    app.listen(port, => console.log('Listenning: ' + port); 
); 

var onGET = (req, res) => { 
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress; 
console.log('User connected: ' + ip); 
res.send('OK: ' + req.query.id); 
} 
app.get('*', onGET); 

如果有必要更加清晰,跌落下面的問題。

希望這有助於..