2016-07-22 6 views
-1

Ich muss JSON vorbereiten, indem Sie die Daten aus MYSQL. Ich habe Daten in MYSQl in der Baumstruktur. Ich versuche, rekursive Funktion zu machen JSON vorzubereiten, um die Anforderung aber immer Fehler gerecht zu werden, habe ich folgende zwei DateienRekursive Funktion in node.js mit q Bibliothek

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

Daten in der Datenbank ich habe ist Artikel 1 Punkt 1.1 Artikel 1.1.1 Artikel 2

Ausgang Ich möchte { "label": "item 1", "data": { "id": "1" }, "children": [{ "label": "item 1.1", "data": { "id": "2" }, "children": [{ "label": "item 1.1.1", "data": { "id": "3" }, "children": [] }] }] }

ich folgende Fehlermeldung

TypeError: Converting circular structure to JSON

Antwort

0

Versuchen Änderung this.fetch_list_tree zu exports.fetch_list_tree bin immer.

this != module.exports on line 28 => undefined

+0

ich die Störung erhalte this.fetch_list_tree nach der Aktualisierung zu Typeerror exports.fetch_list_tree: exports.fetch_list_tree ist keine Funktion –

+0

ich einige R & D hat und bekam das Problem, ich war nicht Ich konnte die Funktion aufrufen, ich habe einige Änderungen in list.js vorgenommen, aber nicht erwünschte, ich habe auch den aktuellen Fehler aktualisiert. Ich bin nicht in der Lage, "output" so zu handhaben, wie es sein sollte. –

+0

'Konvertieren von kreisförmigen Struktur zu JSON' bedeutet, dass einige Knoten des Ergebnisses selbst referenzieren. Versuchen Sie 'JSON.stringify (result, ['label', 'data', 'children'])' '. –