2017-05-10 8 views
0

저는 feathersjs (v2.0)로 작업하면서 매우 새롭습니다. 깃털을 사용하여 소수의 레코드 만 찾는 작은 REST 애플리케이션을 만들었습니다. 그러나, 나는 모른다. 그리고 나는 문서와 예제를 읽는 방법을 찾지 못했다. FIND를 얻고, 놓고, 지우지 못하게한다. 어떤 깃발이 깃털 REST API에서 허용되는지를 구성하는 방법이 있는가? ?. 나는 그냥 반환이 후크 전에 (의 서비스 후크)의 기능을 거부 추가하려했으나 500 오류가 반환되고, 응답은 다음과 같습니다깃털 허용 동사 구성

{"name":"GeneralError","message":"Cannot read property 'bind' of undefined","code":500,"className":"general-error","data":{},"errors":{}}

기본합니다 (어떤 기능이없는 다른 동사에 대한 후크 파일)입니다 :

의미가 있지만, 내가 그들을 허용이 "잘못된"오류를 반환해야하는 이유 당신이 그 동사가 필요하지 않은 경우 내 개인적인 느낌입니다

"name":"NotFound","message":"No record found for id 'null'","code":404,"className":"not-found","errors":{}}

?

UPDATE :

나는 트릭을했지만 응답 헤더가 실제로 무슨 일이 있었는지와 일치하지 않기 때문에 나는 만족 아니에요.

헤더에게 정보를 잡기 위해 나는 here 주어진 답변에 따라 서비스 파일

// This must be before the service creation 
app.use(function(req, res, next) { 
    req.feathers.headers = req.headers; 
    next(); 
}); 

app.use('/myservice', createService(options)); 

이 코드를 추가했다. 그러나 함수가 service creation 매개 변수에있는 daffl의 대답은 feathers-cli를 사용하여 생성 된 코드에서 작동하지 않으므로 before (더 나은 방법이 될 수 있습니까?), createService 함수에서 두 번째 또는 첫 번째 매개 변수로 설정하는 방법 ? 또는 options 객체 내부에서 가능합니까? 컴파일 오류가 발생했습니다.) 나는 "myservice.hooks.js"

module.exports = function() { 
    return function (hook) { 
    if(hook.method !== 'find' && hook.method !== 'error'){ 
     throw new Error('Method not allowed'); 
    }else{ 
     return hook; 
    } 
    }; 
}; 

물론 이것은 500 오류를 제공에 그것을 후크 기능을 가진 새 파일을 정의하고 포함했지만,에 허용 헤더 405 오류가 있어야한다 'GET '. 내가 대신 오류 던지는이 코드를 사용하여 시도 :

hook.params.headers.allow = 'GET'; 
hook.params.headers.status = 405; 

이 더 잘 작동했지만에가는 예를 들어 삭제하고 데이터베이스의 레코드를 삭제하려고 (다행히 데이터베이스 사용자 만이 선택 권한)하지만, 이것은 POST와 PUT에서 비슷한 동작을하지 않아야합니다. 응답 헤더 상태가 200 OK가 아니고 400 (? !!)이고 허용 헤더가 변경되지 않았기 때문에 "GET, POST, PUT, PATCH, DELETE"입니다.

나는 this solution을 읽었지 만 깃털 'hook.params.headers (또는 hook.header (s)가 사용되었지만 헤더가 올바르게 정의되지 않은 경우)를 사용하여 헤더 값을 올바르게 설정하는 방법을 알지 못해보다 적절한 헤더 응답을 반환합니다. 물론 더 이상 계속하지 마십시오. 어떤 아이디어?, 제발 자비를 베풀어 라, 나는 깃털이있는 초보자 (1 주일 미만) 일 뿐이다. 어쩌면 이것은 바보/분명한 질문 일 수도있다.

미리 감사드립니다.

+0

로 익스프레스 오류 핸들을 설정하는 것을 잊지 마세요 또한

const errors = require('feathers-errors'); module.exports = function() { return function (hook) { if(hook.method !== 'find' && hook.method !== 'error'){ throw new errors.MethodNotAllowed('Method not allowed'); }else{ return hook; } }; }; 

또는 쓰기 : 당신은 MethodNotAllowed 오류를 사용하여 귀하의 후크를 변경하여 405을 던질 수 대답하고 그것을 표시하십시오. 감사!:) – Alfabravo

답변

0

정확한 오류 코드를 던지려면 errors API documentation에 설명 된대로 feathers-errors을 사용해야합니다. 접수로 대답을 표시하십시오 중 하나 pointed out in the same chapter

+0

감사합니다 Daff, 죄송합니다.하지만 Express 오류 처리 지침을받지 못했습니다. 나는 "module.exports = app;"앞에 코드를 넣었다. (app.js)와 "app.hooks (appHooks);"전에, 행운을 빌지 않고 응용 프로그램을 시작할 때이 오류가 표시됩니다. "new TypeError ('app.use()에 미들웨어 함수가 필요함);". 그러나 middleware/index.js 파일의 스캐 폴드 코드에는 이미 끝에 Express 오류 핸들이 있으므로 이미 시작되었습니다. 그래서, 기본적으로 내가 생각하는이 코드를 어디에 넣어야할지 모르겠다. "app.use (errorHandler());" – George

+0

마지막으로 나는 그것을 알아 낸다, 나는 실수로 다른 const notFound를 다시 정의하는 훅에서 실수로 붙여 넣은 또 다른 라인을 가지고있다 .... 나는 또한 미들웨어가 이미 핸들러를 가지고 있기 때문에 필요가 없다는 것을 깨달았다. Express 오류 핸들러 코드를 설정하십시오. – George