역시 오픈소스는 삽질하는 맛이 있어요 : )

Titanium용 Parse JS SDK CommonJS 모듈을 소개한 적이 있었는데요.

이걸 이용해서 개발을 잘하고 있었는데, 서버에서 에러를 내려줬을 때 받아지지 않더군요.

그래서 모듈 소스를 한참 보다보니 parse server의 에러를 잘못 처리하고 있는 부분이 있더군요.

그래서 고쳐서 pull request를 날렸어요.

하다보니 알게 된건데, Node package를 Titanium CommonJS 모듈로 만들어주는 좋은 넘(?)도 있네요.

1개의 좋아요

그래서 잘되요?
요즘 삽질하느라 죽겠어~ ㅠㅠ

2개의 좋아요

머지를 해주긴 했는데, 패키징은 다시 안해줬어요.

제 리파지터리에서 받아서 교체하세요.

그러면 서버에서 떨어지는 에러를 제대로 받을 수 있습니다.

바꾸니까 에러는 제대로 떨어지네…ㅋㅋ
그런데 계속 400 Bad Request 에러가 나서 로그인만 되고 암것도 못하겠다…ㅠㅠ

Applicant save error:100 XMLHttpRequest failed: “400 : Bad Request”

아… 혹시 heroku의 config_vars의 SERVER_URL 잘못 설정하신거 아니에요?

parse-server의 index.js에 서버 생성하는데 보시면,

var api = new ParseServer({
  databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
  cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
  appId: process.env.APP_ID || 'myAppId',
  masterKey: process.env.MASTER_KEY || '', //Add your master key here. Keep it secret!
  serverURL: process.env.SERVER_URL || 'http://localhost:1337',  // Don't forget to change to https if needed
  filesAdapter: new S3Adapter(
    process.env.S3_ACCESS_KEY,
    process.env.S3_SECRET_KEY,
    process.env.S3_BUCKET,
    {
      region: process.env.S3_REGION,
      directAccess: process.env.S3_DIRECT_ACCESS
    }
  ),
});

이중에 이 부분이요.
serverURL: process.env.SERVER_URL || ‘http://localhost:1337’, // Don’t forget to change to https if needed

config vars의 SERVER_URL을 https://****.herokuapp.com/parse 로 해놓으셔야 합니다.

그러고 터미널에서 post 보내보세요. get은 되고 post는 안되면 SERVER_URL 부분이 맞으실겁니다.

curl -X POST \
-H "X-Parse-Application-Id: ****************************" \
-H "X-Parse-REST-API-Key: *****************************" \
-H "Content-Type: application/json" \
-d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}' \
https://****.herokuapp.com/parse/classes/GameScore

(post로 데이터 저장할 대상인 클래스는 있어야 되구요)

  • Tip: 요런 리퀘스트 테스트나 cloud code 개발할 때 테스트 용으로 postman이라는 크롬 확장 프로그램 쓰시면 짱짱 편해요. 터미널로 하는건 노가다라…

서버 세팅은 문제없는거 같아요~
당근 터미널에서 curl로 POST 해보면 잘 먹어요…설정에서 지정에 S3에 파일 저장도 잘되고…
헤로쿠에도 해보고 nodechef에도 셋업해서 해봤는데…똑같네요.
문제는 parse.js나 TiParseJS 모듈 쪽 서버세팅이 문제인지…아…못찾겠다…

일단 TiParseJS 모듈로 작업하고 있는데 데이터 가져오고 처리하는것은 대충은 되던데요.
restapi sync adapter로 되어 있는 backbone model은 문제 없이 동작하고, parse sync adapter도 사실 처리는 rest랑 크게 다르지 않아서 되구요.
우리 다음 스크럼에 parse-server compatibility가 주요 할일 중에 하나니깐 해보면서 겪는 문제들 정리해서 올려드릴게요.
Parse JS SDK도 결국 범용 http 클라이언트를 쓰는거고 특별히 문제될건 없어보이니 약간 삽질하다보면 되겠죠ㅎㅎㅎㅎ
아참 titanium용 S3 JS SDK도 해볼거에요~

아놔…삽질 지대로 했네…
일단 bad request 문제는 해결했네요…원인은…
Parse.User.enableRevocableSession(); <== 요놈 켜놓아서 계속 400 bad request error를 뿜었네요…
혹시나 해서 주석처리 하고 해봤더니…일단 잘 됩니다…ㅠㅠ
이것땜에 일주일 삽질했네요…어후…
걍…포기하고 동우님이 다 해놓으면 숫가락만 얹을랬더니…주말내내 또 테스트 하겠네요…ㅎㅎ

이 글의 제목과 일맥상통하는 댓글이네요ㅋㅋㅋㅋ

1개의 좋아요

TiParseJS 모듈이 parse server의 정확한 error code와 message를 전달하도록 수정했습니다.

http에러가 아니라 parse server가 반환하는 정확한 에러를 받아서 에러처리하실 수 있습니다.

예를 들면 e.code에 따른 처리나. cloud code에서 response.error(xxxx); 로 반환하면,

e.message로 받을 수 있어요.

그리고 parse sync adabter도 마찬가지로 정확한 에러를 리턴하게 고쳤어요.

1개의 좋아요