2017-05-11 10 views
0

feathersjs 설명서를 읽었지만 서비스에서 find 메소드를 수행 한 후에 쿼리 매개 변수를 제공하지 않으면 서비스가 모든 데이터를 반환합니다. 원하지 않아. 계속 진행하기 위해 하나 이상의 쿼리 매개 변수가 있는지 확인하기 위해 후크를 정의하려면 어떻게해야합니까? 그렇지 않으면 403 오류 (잘못된 요청)를 다시 보냅니다.feathresjs의 매개 변수 부족 확인

나는 그것이 내가이 시도 할 수있는 방법으로 의심이 :

app.service('myService') 
    .before(function(hook) { 
     if (hook.params.query.name === undefined){ 
      console.log('There is no name, throw an error!'); 
     } 
}) 
.find({ 
    query: { 
     $sort: { 
      year: -1 
     } 
    } 
}) 

을 그리고 훅이 (즉 & 정말 절망적 인 듯 | 바보)에 후크 파일에 시도 :

function noparams (hook) { 
    if (hook.params.query.name === undefined){ 
     console.log('There is no name, throw an error!'); 
    } 
} 

module.exports = { 
    before: { 
     find: [ noparams(this) ] ... 
    } 
} 

을 하지만 컴파일되지 않습니다 (매개 변수로 보낼 내용을 알지 못합니다). 예제는 2.0 이전 버전에 해당하는 것으로 보였습니다. 그리고 위에 나온 코드는 app.js에있는 것처럼 보였지만 모두 feathers-cli를 사용하여 다르게 코딩되므로 책의 예조차도 t에 반대하지 않습니다. 그는 다른 파일에 코드가 있어야한다는 것을 보여주기 때문에 혼란 스럽습니다.

감사합니다.

+0

어떤 데이터베이스를 사용하고 있습니까? 그 mongodb 그 다음 그것이 작동 해야하는 방법입니다. – Jalil

+0

나는 그 행동을 바꾸고 싶지 않다고 생각한다. 하지만 당신이 할 수 있다고 주장한다면 (hook.params.query.length> 0) – Jalil

+0

@Jalil. 귀하의 답변을 주셔서 감사합니다, 내 업데이 트를 참조하십시오. 좀 더 우아한 해결책을 알고 있습니까? 이것은 매우 더러운 것 같습니다. – George

답변

0

나는 후크 전에를 사용하여 종료, 그래서 사용되는 코드는 이것이다 :

const errors = require('feathers-errors'); 

module.exports = function() { 
    return function (hook) { 
    if(hook.method === 'find'){ 
     if (hook.params.query.name === undefined || hook.params.query.length == 0){ 
     throw new errors.BadRequest('Invalid Parameters'); 
     }else{ 
     return hook; 
     } 
    } 
    } 
}; 

깃털-CLI 응용 프로그램 (깃털 버전 2.x)를 생성하면 다른 작업을 수행 할 필요가 없습니다 사용한 경우 . 이전 버전의 경우 Express 오류 처리기를 추가해야 할 수도 있으며 문서 | 오류 | REST를 참조하십시오.

감사합니다.