2017-07-19 88 views
1

我試圖在MongoDB中存儲一些數據,我不確定我正在使用的數據類型,因爲我使用的是formbuilder(https://github.com/kevinchappell/formBuilder)。在MongoDB中存儲JSON

我從獲取數據:

document.getElementById('getJSON').addEventListener('click', function() { 
    var ans = formBuilder.actions.getData('json', true); 

    //console.log(ans); 
    //var ans2 = JSON.parse(ans); 

    alert(ans); 

    console.log(ans); 

    $.ajax({ 
     type: "POST", 
     data: ans, 
     url: "/j", 
     success: function(){ 
      console.log('success'); 
     } 
    }); 

    document.forms["myForm"].submit(); 

}); 

它達到我的後端像這樣:

//FETCHING THE JSON OF THE CLAUSE FORM CREATED BY THE ADMIN 
router.post('/j', function(req, res, next) { 

req.session.fdata = req.body; //JSON FETCHED FROM JAVASCRIPT USING AJAX, STORED IN SESSION 


if(req.session.fdata==null) //CHECKING IF WE ARE RECEIVING VALUES 
{ 
    res.redirect('/admin'); 
} 
else { 

    mongo.connect(url, function (err, db) { 

     assert.equal(null, err); 

     //var jfdata = JSON.parse(req.session.fdata); 

     db.collection('clauses').insertOne(req.session.fdata, function (err, result) { 

      console.log('New Clause Added'); 
      console.log(req.session.fdata); 
      db.close(); 

     }); 
    }); 

    res.redirect('/admin'); 
} 
}); 

我將它插入到數據庫,並在數據庫中,但在檢索我看起來不錯似乎不能訪問數據的內部部分。我的數據格式不正確嗎?它是JSON還是JS對象?

它看起來像這樣的DB(數據庫是插入前空)enter image description here

這是控制檯打印

[ { _id: 596de520ef77eb2614cd1e47, 
'[\n\t{\n\t\t"type": "number",\n\t\t"label": "Number",\n\t\t"description": 
"total number",\n\t\t"placeholder": "0",\n\t\t"className": "form- 
control",\n\t\t"name": "number-1500374279764"\n\t}\n]': '' }, 
{ _id: 596de520ef77eb2614cd1e48 } ] 
+0

我們需要查看您正在保存的數據庫結構或數據以瞭解錯誤。你怎麼知道它在db中看起來很好? – Shrabanee

+0

控制檯'req.session.fdata'並把它放在你的問題中。 – Shrabanee

+0

在控制檯上是相同的,除了新行分別用\ n和\ t表示新行和標籤。 – abhimalik

回答

1

你要保存的數據似乎有什麼不正確的我。

你得到的是一個JSON對象的字符串。 您必須使用JSON.parse將其轉換爲適當的JSON對象。

JSON.parse('[\n\t{\n\t\t"type": "number",\n\t\t"label":"Number",\n\t\t"description": "total number",\n\t\t"placeholder": "0",\n\t\t"className": "form-control",\n\t\t"name": "number-1500374279764"\n\t}\n]')  

之後,您可以形成數據並插入到數據庫中。

var query = { 
      array : [{"type": "number", 
        "label": "Number", 
        "description": "total number", 
        "placeholder": "0", 
        "className": "form-control", 
        "name": "number - 1500374279764"}] 
     } 

db.collection('clauses').insertOne(query, function (err, result) 
{ 
     db.close(); 
}); 

讓我知道它是否有幫助!

+0

我會說這可能不會幫助考慮語法是完全無效的。甚至似乎也不打擾處理採取表單數據並插入它的問題。希望有所幫助。 –

+0

@Shrabanee謝謝你的回答,它在JSON中拋出了一個意想不到的令牌o位置1錯誤 – abhimalik

+0

JSON.parse()你必須使用JSON字符串。不是你得到的全部東西。 – Shrabanee