0

私は、mongodb-node-driver を使用して NodeJS と MongoDB ですべて構築された比較的大規模な webapp を持っています。今、私は最も奇妙な問題に遭遇しました。

私はこの機能を持っています:

function newLoc(req, res){
    var newloc = req.body;
    console.log(JSON.stringify(newloc));
    locs.insert(newloc,{safe:true},function(err,doc){
        if(err) returnError(res,'aww shit locinsertion error!\n\n'+err.message);
        else{
            console.log(doc[0]);
            returnSuccess(res,"The ID of the location you just added is: "+doc[0]['_id']);
        }
    });
}

すべてが適切に設定されており (接続の開始に関して)、returnSuccess は問題なく動作します。req.bodyPOST 経由で送信されるフォームからのデータが含まれます。両方の console.log は同じものを出力しますが、2 番目のものには「_id」が追加されており、すべてのキーには引用符がありません。

ただし、データベースには何もありません。エラーはありません。ドキュメントは挿入されたかのように返されますが、何も追加されません。これは私のコードの他のどこにも問題がないため、特に奇妙です(そして私はたくさんの挿入を行います)。

混乱を招くためにnewloc、挿入を be に変更すると、挿入されます{foo:bar}。何が起こっているのか誰にもわかりませんか?

christkv の要求に応じて編集します。印刷されたオブジェクトは次のとおりです。

{"music":"art","array":[],"name":"sdf","info":"","date":"asdf","_id":"fSURBOvCU"}

{ muic: 'art',
  array: [],
  name: 'sdf',
  info: '',
  date: 'asdf',
  _id: 'fSURBOvCU' }

「mongod」プロセス出力には何も出力されていません。これは、エラーがログに記録される場所でもあると思います。

また、console.log(JSON.stringify(newloc))JSON.stringify を削除すると、出力は同じになります。

4

1 に答える 1

0

Ok I think I've figured it out. My collection creation code originally looked like this:

  db.createCollection('place', function(err, pplace){
  if(err){
    console.log('db.createCollection error!');
    console.log(err);
    return;
  }
        db.createCollection('tips', function(err, tipps){
            if(err){
                console.log('tips didnt get made: \n'+err);
            }
            else{
                                    place = pplace;
                tips = tipps;
                console.log(' place tips created');
            }
        }); 
 });

I don't create place or tips anywhere else since javascript automatically makes something a global if you don't give it a "var".

Now, I moved place = pplace to be right under the if statement after it's creation, and i also added a var place, tips; up above. This seems to have fixed the issue, and now everything I throw at my code seems to be inserted properly into my collection.

I'm still completely confused as to how this would change anything though, seeing as how I was getting the usual response for a SUCCESSFUL insert, not a failed one... Any thoughts?

于 2012-07-14T01:26:52.763 に答える