2012-02-09 11 views
2

私はnodeとexpressでREST APIに取り組んでいます。私はmongoose.jsを使用しています。私はdb内に新しいユーザー文書を作成しています。汗はない、素晴らしい作品。Node.js:Underscoreでオブジェクトをクローンし、その後に新しいプロパティをクローンに割り当てるにはどうすればよいですか?

.save()が返すjsonオブジェクトにプロパティを追加するときに問題が発生します。このプロパティは、保存後に追加する必要があります。これは、RESTインターフェイスを消費するクライアントのフラグだからですが、dbに保存したいものではありません。ここで

は私の例です:

var _ = require('underscore');  
var user = new User({"username" : "Joe"}); 
user.save(function(err, newuser){ 
    if (err) return next(err); 
    var nu = _.clone(newuser); 
    nu.newbie = 'true'; 
    res.send(JSON.stringify(nu)); 
}); 

ここでは例として応答が(これはnuに何である)です。

{ 
"username": "Joe", 
"_id": "4f343383a5503c452a000002", 
} 

あなたが見ることができるように、私は財産nu.newbieとセットを追加しようとしていますそれはtrueにあり、動作していません。私はこれがある種の範囲または参照の問題であると信じています。何か案は?

+0

悪い応答の例を挙げることはできますか?あなたが働かないことは、 'newbie'というプロパティが完全に見つからないか、値だけが欠落していることを意味しますか?残りの「newuser」はそれをレスポンスにしていますか? –

+1

本当に文字列 "true"としてエンコードするつもりでない限り、動作しない理由は見当たりません( 'true'を引用する必要はありませんが)。 – Flambino

+0

@XHR役職。初心者は完全に欠けている。 – k00k

答えて

5

問題は、saveによって返されたオブジェクトが「生の」javascriptオブジェクトではないことです。マングースで包まれ、そこにその方法があります。あなたがクローンすると、あなたもマングースのものをクローンします!

mongooseオブジェクトがres.sendによって送信されると、それはシリアル化され、mongooseは認識しているオブジェクトのメンバのみを直列化します。プロパティを追加する場合は、「生の」javascriptオブジェクトで行う必要があります。これと同じように:

var nu = newuser.toJSON(); 
nu.newbie = 'true'; 
res.json(nu); 

も、res.jsonはJSONに変換し、コンテンツタイプを設定するの世話をするだけで素敵な速記です。

+0

偉大な答え、ありがとう! – k00k