2016-12-21 73 views
0

我在寫一個Node.js應用程序。還有一些地方我必須修改函數的參數。例如,對於增加用戶這個快遞中間件請求,以便以後我可以查看:在JavaScript中修改函數參數是一種不好的做法

exports.fetchUserDetails = function (req, res, next) { 
    httprequest(opts, function (err, res, body) { 
    req.user = body.user; 
    next() 
    } 
} 

的事情是,我開始使用靜態代碼分析儀(ESLint),並且總是抱怨重新分配函數的參數(http://eslint.org/docs/rules/no-param-reassign )。我想這個規則是有原因的。

我知道,修改功能參數可以在這個例子中是壞的,如:

function modifyParam(param) { 
    param.a = 2 
} 

var obj = { a: 1 }; 
console.log(obj); // outputs { a: 1 }; 
modifyParam(obj); 
console.log(obj); // outputs { a: 2 }; 

但我真的沒有看到其他的方式重構中間件我不帶參數的重新分配。

所以我的問題是:

  • 我什麼時候可以使用PARAMS重新分配?
  • 我該如何重構我的中間件以避免這種情況? (或者我應該像它一樣離開它)

回答

2

我認爲在這種情況下它很好。您正在設置將由後續處理請求的函數使用的狀態。

linters抱怨這個問題的原因是,調用一個函數時通常不清楚它會修改它的參數,導致bug,就像你在你的問題中描述的那樣。

但在這種情況下,你的函數只有一個調用者,表達式框架,並且它總是清楚你的函數在哪種情況下被調用,所以我認爲這不是一個問題。

2

您提供的示例不包括重新分配函數參數。

exports.fetchUserDetails = function (req, res, next) { 
    httprequest(opts, function (err, res, body) { 
    req.user = body.user; 
    next() 
    } 
} 

你只重視新領域req參考,但你不重寫req本身。

表示中間件從一開始就使用這種方法,並沒有什麼錯。

相關問題