2016-09-29 39 views
0

我使用节点插入JS在服务器侧蒙戈DB对象和表达JS框架和主音方面,我使用的角度js.But它抛出的错误是开始这MongoError:在控制台接触的关键$ GET不能以 '$' 开始

server.js

app 
.use(bodyParser.json()) 
.post('/contact', upload.single('file'), function(req,res){ 


      var contact = req.body; 
      delete contact.$promise; 
      delete contact.$resolved; 
      console.log(contact); 
      //console.log(req.file); 

      contact.userId = 1; 

      db.collection(CONTACTS_COLLECTION).insertOne(contact, function(err, doc) { 
       if (err) { 
        console.log(err + " Unsuccess"); 
       } else { 
        console.log(doc.ops[0]); 
        res.status(201).json(doc.ops[0]); 
       } 
       }); 

}) 

显示值

{ firstName: 'abc,text', 
lastName: 'abc,text', 
toJSON: 'function(){var a=v({},this);delete a.$promise;delete a.$resolved;return a}', 
'$get': 'function (a,b,d){x(a)&&(d=b,b=a,a= {});a=m[c].call(this,a,this,b,d);return a.$promise||a}', 
'$save': 'function (a,b,d){x(a)&&(d=b,b=a,a={});a=m[c].call(this,a,this,b,d);return a.$promise||a}', 
'$query': 'function (a,b,d){x(a)&&(d=b,b=a,a={});a=m[c].call(this,a,this,b,d);return a.$promise||a}', 
'$remove': 'function (a,b,d){x(a)&&(d=b,b=a,a={});a=m[c].call(this,a,this,b,d);return a.$promise||a}', 
'$delete': 'function (a,b,d){x(a)&&(d=b,b=a,a={});a=m[c].call(this,a,this,b,d);return a.$promise||a}', 
'$update': 'function (a,b,d){x(a)&&(d=b,b=a,a={});a=m[c].call(this,a,this,b,d);return a.$promise||a}' } 

错误

MongoError: key $get must not start with '$' Unsuccess

预先感谢您

+0

我想存储在数据库 – VishalPethani

回答

0

你认真想保存这是在控制台正在显示相同的联系人?用所有的$命令?还是它被追加不期望?你从前端发送什么对象?

至于MongoDB的$答案是保留关键字,它不应该的,你要保存文件的关键内部使用。如果他们允许密钥中的$,则由于mongo使用具有特殊用途的$关键字,所以查询将开始失败,这也将是类似于SQL注入的安全威胁。

作为一个解决方案,如果你真的想与存储相同数据的接触,我会建议替换$用GET或_GET和$与关键字类似,所有的键搞定。

感谢

+0

firstName和lastName才值确定我的上述问题是解决...,另一个是我要存储在接触req.body价值和req.file ...你给我解决方案吗? – VishalPethani

+0

如果您的request.file文件不希望存储在同一个集合中,您可能希望看到mongo gridfs解决方案将文件存储为块和元数据 –

+0

在联系人集合中,一个记录有一个文件,我想检索该记录和文件在网页上时,请求即将.so我如何将该文件与特定的ID .....简而言之,我想存储在一个记录中的文件,就像我们在MySQL数据库中做的那样 – VishalPethani