2016-07-22 26 views
-1

我需要通過從MYSQL獲取數據來準備JSON。我在樹結構中有MYSQl中的數據。我試圖讓遞歸函數準備JSON達到要求,但得到的錯誤,我有以下兩個文件使用q庫的node.js中的遞歸函數

main.js

/* jshint node: true */ 
"use strict"; 

var db = require('./helpers/db'); 
var list_worker = require('./workers/list'); 
var Q = require("q"); 

module.exports = function (app) { 
/** 
* return the profiles list 
*/ 
app.get('/api/lists/get_list_tree_by_user/:user_id', function (req, res) { 

    list_worker.fetch_list_tree(req.params.user_id, 0).done(function (out) { 
     console.log(out); 
     res.send(out); 
    }); 
}); 
}; 

list.js數據庫

/* jshint node: true */ 
"use strict"; 

var db = require('../helpers/db'); 
var Q = require("q"); 
var output = { 
    data: [] 
}; 

var fetch_list_tree = function (user_id, list_id) { 

// prepare query to fetch lists assosiated with a user. 
var query = "SELECT b.`id`, b.`name` FROM `lists_users` a JOIN `lists` b ON(a.`list_id` = b.`id`) WHERE a.`user_id` = " + user_id + " AND a.`user_role` = 'owner' AND b.`parent_id` = " + list_id + " AND b.`deleted` = 'N';"; 

return db.query(query).then(function (result) { 

    if (result.length > 0) { 
     var lists = result.map(function (list, index) { 

      output.data[index] = { 
       label: list.name, 
       data: { 
        id: list.id 
       } 
      }; 

      return fetch_list_tree(user_id, list.id).then(function (leaf_childs) { 
       output.data[index].children = []; 
       output.data[index].children.push(leaf_childs); 
       return leaf_childs; 
      }); 
     }); 

     return Q.all(lists).then(function (data) { 
      return output; 
     }, function (err) { 
      throw err; 
     }); 
    } else { 
     return []; 
    } 
}, function (err) { 
    throw err; 
}); 
}; 

module.exports = { 
    fetch_list_tree: fetch_list_tree 
}; 

數據我有 項目1 項目1.1 項目1.1.1 項目2

輸出我想 { "label": "item 1", "data": { "id": "1" }, "children": [{ "label": "item 1.1", "data": { "id": "2" }, "children": [{ "label": "item 1.1.1", "data": { "id": "3" }, "children": [] }] }] }

我收到以下錯誤

TypeError: Converting circular structure to JSON

回答

0

嘗試改變this.fetch_list_treeexports.fetch_list_tree

上線this != module.exports 28 =>未定義

+0

我更新this.fetch_list_tree到exports.fetch_list_tree類型錯誤後得到的錯誤:exports.fetch_list_tree不是一個函數 –

+0

我做了一些R&d,得到了這個問題,我是不是能夠調用這個函數,我在list.js中做了一些修改,但沒有得到滿足,我更新了當前的錯誤。我無法處理'輸出',因爲它應該是。 –

+0

'將循環結構轉換爲JSON'意味着結果的某個節點本身引用。試試'JSON.stringify(result,['label','data','children'])'。 –