2016-12-21 2 views
0

Node.js 응용 프로그램을 작성하고 있습니다. 그리고 함수의 주장을 수정해야하는 곳이 있습니다. (http://eslint.org/docs/rules/no-param-reassignJavaScript에서 함수 인수를 수정하는 것은 나쁜 습관입니까

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

는 것은, 나는 정적 코드 분석기 (ESLint)를 사용하기 시작하고 항상 함수 인수를 재 할당에 대한 불평 : 예를 들어, 사용자를 추가하는이 익스프레스 미들웨어는 그렇게 요청하는 내가 나중에 볼 수 있습니다). 나는이 규칙이 이유가 있다고 생각한다.

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

이 경우에는 괜찮다고 생각합니다. 요청을 처리하는 후속 함수에서 사용할 상태를 설정하고 있습니다.

lint가이 문제에 대해 불평하는 이유는 함수를 호출 할 때 종종 질문에 설명 된 것처럼 인수가 수정되어 버그가 발생한다는 사실이 불분명하기 때문입니다.

그러나이 경우 함수에는 호출자 인 익스프레스 프레임 워크가 하나만 있으며 함수가 호출되는 상황이 항상 명확하므로 여기에 문제가 있다고 생각하지 않습니다.

2

제공된 예제에는 함수 인수를 재 할당하는 것이 포함되지 않습니다.

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

당신은 req 참조에 새 필드를 연결,하지만 당신은 req 자체를 무시하지 않습니다.

Express 미들웨어는이 접근법을 처음부터 사용하고 있으며, 아무런 문제가 없습니다.

관련 문제