rest로 요청을 받아야 하는 일이 생겨서 meteor server 단에서 url로 요청을 받고 callback을 활용하여 db 조작을 해야 하는 상황
- Meteor WepApp api 사용하기
- Meteor.bindEnvironment를 콜백에 적용하여 활용하기
Meteor에서 제공하는 WepApp 패키지를 활용하여 server에서 지정 url로 요청을 받고 이를 활용할 수 있었다.
Meteor.absoluteUrl()을 활용하면 현재 url을 받을 수 있다. Meteor.absoluteUrl()/routing 이름 작성을 활용하여 받기도 가능
하지만 콜백 내부의 db를 조작하는 부분에서
Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.
와 같은 에러가 났다.
참조:
이 에러는 비동기 함수를 핸들링하는 경우, 즉 콜백 함수를 사용할 때 콜백 함수는 Meteor의 Environment context를 잃기때문에 Meteor에서 사용할 수 있는 mongo shell에 연결할 수 없기 때문에 발생하는 에러다.
WebApp api와 같이 활용하려고 할때는
WebApp.connectHandlers.use(
"/routingName",
Meteor.bindEnvironment((req, res, next) => {})
)
위와 같은 방식으로 사용하면 에러해결이 가능하다.
참조:
https://stackoverflow.com/questions/49355421/how-to-insert-in-collection-within-a-fiber
https://guide.meteor.com/using-npm-packages.html#bind-environment
https://stackoverflow.com/questions/28996727/wrapping-mongodb-calls-within-a-promise