0

我有一个相对广泛的 web 应用程序,它全部使用 mongodb-node-driver 在 NodeJS 和 MongoDB 中构建。现在我遇到了最奇怪的问题。

我有这个功能:

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.body包含来自通过 POST 发送的表单的数据。两个 console.log 都打印相同的内容,除了第二个添加了“_id”并且所有键都没有引号。

但是,没有任何东西进入数据库。没有错误,文档就像插入一样返回,但没有添加任何内容。这尤其奇怪,因为这在我的代码中的任何其他地方都不是问题(而且我做了很多插入)。

更令人困惑的是,如果我newloc将插入更改为{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

好的,我想我已经想通了。我的集合创建代码最初如下所示:

  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');
            }
        }); 
 });

我不会在其他任何地方创建位置或提示,因为如果您不给它一个“var”,javascript 会自动使某些东西成为全局。

现在,我在创建后将 place = pplace 移动到 if 语句的正下方,并且我还在var place, tips;上面添加了一个 up 。这似乎已经解决了这个问题,现在我扔给我的代码的所有东西似乎都正确地插入了我的集合中。

不过,我仍然对这将如何改变任何事情感到完全困惑,看看我如何获得成功插入的通常响应,而不是失败的插入......有什么想法吗?

于 2012-07-14T01:26:52.763 回答