2012-02-21 14 views
2

に私は、ノード上の旅で遊んでいると私は唯一のルータはJSONが空の値があるキーの値としてオブジェクトを要求解釈していることに気づいた:つまりジャーニーJSONのNode.js

を、サーバーにJSONオブジェクトを投稿すると、次のようになります。

http://127.0.0.1:3000/> post /events 
... {url : "test"} 
HTTP/1.1 200 OK 
Date: Tue, 21 Feb 2012 00:42:38 GMT 
Server: journey/0.4.0 
Content-Type: application/json;charset=utf-8 
Content-Length: 67 
Connection: keep-alive 

{ 
    event: { 
     _id: '10tPxx', 
     resource: 'Event', 
     {url : "test"}: '' 
    } 
} 

オブジェクト全体が文字列と見なされています。

はここに私の旅関連のコードです:

exports.createRouter = function(resource){ 
    var router = new (journey.Router)({ 
     api: 'basic' 
    }); 
    router.path(/\/events/, function(){ 
.... 
     this.post().bind(function(res, event){ 
      console.log(event); 
      resource.create(event, function(err, result){ 
       if(err){ 
        return res.send(500, {}, {error: err.error}); 
       } 
       res.send(200, {}, { event: result}); 
      }); 
     }); 
... 
    }); 
    return router; 
}; 

コンソールのプリントアウトは、次のとおりです。

{ '{url : "test"}': '' } 

おそらく間違っている可能性が何?

+0

投稿するとき、 'Content-Type'リクエストヘッダーを 'application/json'に設定していますか? jsonが 'JSON.parse'ではなく' querystring.parse'を使って解析されているようです。 Revelantコード:https://github.com/cloudhead/journey/blob/master/lib/journey.js#L331 – loganfsmyth

+0

httpリクエストは次のように表示されます: 'Content-Type:application/json; charset = utf-8' http-consoleを使用するだけです。 – mabounassif

+0

'; charset = utf-8'がRegexテストを台無しにしているのだろうかと思います。 – mabounassif

答えて

0

jsonがJSON.parseの代わりにquerystring.parseを使用して解析されているようです。

'application/json'を含む 'content-type'ヘッダーを正しく送信していることを確認してください。

+0

ありがとうございます! – mabounassif

+0

問題をクリアするには、HTTPコンソールツール(HTTPリクエストを送信するためのツール)を使用していたのと同じ問題がありました。デフォルトでcontent-typeに '; charset = utf-8'が追加されました。これをワンショットで解決するために、端末に次のコマンドを挿入しなければなりません: 'http-console --json localhost'。これが必要な人たちをうまく見つけられることを願っています。 – mabounassif