2017-03-21 4 views
0

나는 최근에 feathers.js으로 놀았으며 나는 그것을 좋아한다. 나는 다음과 같은 문제가 있지만 ...깃털에서 응답 상태 코드 수정하기 hook.result

update (http put) 서버 방법으로 배치 된 이전에 어떤 조건에 따라 create 또는 update 중 하나를 결정합니다. 내가 create을 선택하면 내가

let createLocation = (hook) => { 
    return hook.app.service('locations').create({ 
    "user": hook.data.user, 
    "location": [{ 
     "latitude": hook.data.location[0].latitude, 
     "longitude": hook.data.location[0].longitude 
    }] 
    }).then(location => { 
    hook.result = location; 
    //************ change the response status code here?? **************\\ 
    }); 
}; 

을 hook.result 사용하여 서비스 방법을 건너하지만 201 created에 충실하기 위해 응답 상태 코드를 변경할 수 없습니다입니다. 도움을 주시면 감사하겠습니다. (가능한 경우이 코드가 처리되는 곳의 소스 코드를 지적하십시오. 검색했지만 성공하지 못했습니다.)

답변

1

서비스 및 후크는 전송 독립적이므로 전송, 웹 소켓 및 HTTP를 통해 사용할 수 있습니다. HTTP 특정 로직은 자체 미들웨어에 있어야합니다. 두 가지 옵션이 있습니다. a custom formatter을 구현할 수있는 모든 서비스의 상태 코드를 설정하려면 특정 서비스에 대해서만 register service specific middleware을 사용할 수 있습니다.

데이터에서 상태 코드를 공제 할 수있는 방법이없는 경우, 당신이 할 수 define a hidden property (즉, 쓰기하지 않고 JSON으로 변환 할 때 표시되지 않습니다) 데이터 객체 :

let createLocation = (hook) => { 
    return hook.app.service('locations').create({ 
    "user": hook.data.user, 
    "location": [{ 
     "latitude": hook.data.location[0].latitude, 
     "longitude": hook.data.location[0].longitude 
    }] 
    }).then(location => { 
    Object.defineProperty(location, '__status', { 
     value: 201 
    }); 
    hook.result = location; 
    }); 
}; 

그리고 사용자 정의 포맷터에서 사용 : passing the response to params 또는 대신 추가 메타 정보가있는 래퍼 객체 ({ status, data }를) 반환과 같은 다른 옵션이 있습니다

const app = feathers(); 

function restFormatter(req, res) { 
    res.format({ 
    'application/json': function() { 
     const data = res.data; 

     res.status(data.__status || 200); 
     res.json(data); 
    } 
    }); 
} 

app.configure(rest(restFormatter)); 

.