2014-09-14 5 views
0

사용자가 서버에서 자원을 요청할 때 물론 요청 자체가 '안전하고 유효'함을 확인하고 싶습니다. 현재 내 코드에서 내가 좋아하는 뭔가 보이는이 사제 솔루션을 사용 assertThat()node.js에서 요청의 유효성 확인 및 오류 발생시 종료

if(assertThat(validator.isAlphanumeric,data.currentQuestion,next)){return;} 

var assertThat = function(func,value,next){ 
    if(!func(value)){ 
     var err = new Error("[...]"); 
     err.status = 422; 
     next(err); 
     return true; 
    } 
} 

이 잘 작동하지만 더 실행을 방지하기 위해 거기 if 문이 나에게 꽤 자극했다 (제대로 들여 쓰는 것은 너무 많은 공간을 사용하지만 한 줄에 쓰는 것은보기 흉한 것처럼 보임). 익스프레스 프레임 워크 내에서 어떤 식 으로든 if 문 없이도 작동하는 함수를 설계 할 수있는 방법이 있습니까? 나는 불가능을 요구할지도 모르지만, node.js에 대한 나의 경험이 제한되어 있고 가능한 한 아름답게이 애플리케이션을 디자인하려고 노력하고있다.

+0

는 대신'next'를 호출 assertThat''에 오류를 던지고 시도? – Volune

답변

1

if을 우회 할 수있는 유일한 방법은 이전에 assertThat()을 사용하고 있던 경로 처리기 나 미들웨어를 사용자 지정 미들웨어 기능 앞에 삽입하는 경우입니다. 미들웨어는 예를 들어 적용하려는 유효성 검사기 목록을 가져올 수 있습니다 요청에. 예 :

function validate(validators) { 
    return function(req, res, next) { 
    var data = req.body; 
    for (var i = 0, validators.length, v; i < len; ++i) { 
     v = validators[i]; 
     if (!v.fn(data[v.name])) { 
     var err = new Error('[...]'); 
     err.status = 422; 
     return next(err); 
     } 
    } 
    next(); 
    }; 
} 

그런 다음 당신이이 같이 사용할 수 있습니다

app.get('/foo', 
     validate([ 
      { fn: validator.isAlphanumeric, name: 'currentQuestion' } 
     ]), 
     function(req, res) { 
    res.send('Passed validation!'); 
}); 
+0

아직 그 미들웨어가 작동하는 방식으로 내 머리를 싸려고합니다. 하나의'app.get' 호출로 그것들을 연결할 수 있다는 생각을하지 못했다 ... 어쨌든 그 문서들을 더 잘 읽어야 할 것입니다. –

관련 문제