I've got ce qui suit...
qui appelle ce qui suit...
Cependant, mon code n’atteint jamais « ZOMG ici » mais plutôt jette l’erreur suivante lors de l’exécution``
Quelqu'un a-t-il une idée, ce qui est la cause ?
I've got ce qui suit...
qui appelle ce qui suit...
Cependant, mon code n’atteint jamais « ZOMG ici » mais plutôt jette l’erreur suivante lors de l’exécution``
Quelqu'un a-t-il une idée, ce qui est la cause ?
Cela signifie que l'objet que vous transmettez la demande (je suppose que c'est - pagedoc
) a une référence circulaire, quelque chose comme:
var a = {};
a.b = a;
JSON.stringify
ne peut pas convertir des structures de ce genre.
N. B.: Ce serait le cas avec les nœuds DOM, qui ont des références circulaires, même si elles ne sont pas attachées à l'arbre du DOM. Chaque nœud a un ownerDocument
qui se réfère à l' document
dans la plupart des cas. document
a une référence à l'arbre du DOM au moins jusqu' document.body
et document.body.ownerDocument
renvoie à l' document
nouveau, qui n'est qu' un des multiples références circulaires dans l'arborescence DOM.
Comme par le JSON docs chez Mozilla, JSON.Stringify
a un deuxième paramètre censor
qui peut être utilisé pour filtrer/ignorer les enfants lors de l'analyse de l'arbre. Cependant, peut-être vous pouvez éviter les références circulaires.
Dans Node.js nous ne pouvons pas. Donc, nous pouvons faire quelque chose comme ceci:
function censor(censor) {
var i = 0;
return function(key, value) {
if(i !== 0 && typeof(censor) === 'object' && typeof(value) == 'object' && censor == value)
return '[Circular]';
if(i >= 29) // seems to be a harded maximum of 30 serialized objects?
return '[Unknown]';
++i; // so we know we aren't using the original object anymore
return value;
}
}
var b = {foo: {bar: null}};
b.foo.bar = b;
console.log("Censoring: ", b);
console.log("Result: ", JSON.stringify(b, censor(b)));
Le résultat:
Censoring: { foo: { bar: [Circular] } }
Result: {"foo":{"bar":"[Circular]"}}
Malheureusement, il semble y avoir un maximum de 30 itérations avant qu'il suppose automatiquement qu'il est circulaire. Sinon, cela devrait fonctionner. J'ai même utilisé areEquivalent
d'ici, mais JSON.Stringify
en jette toujours l'exception après 30 itérations. Pourtant, il est assez bon pour obtenir une bonne représentation de l'objet à un haut niveau, si vous en avez vraiment besoin. Peut-être que quelqu'un peut améliorer sur ce bien? Dans Node.js pour une requête HTTP objet, j'obtiens:
{
"limit": null,
"size": 0,
"chunks": [],
"writable": true,
"readable": false,
"_events": {
"pipe": [null, null],
"error": [null]
},
"before": [null],
"after": [],
"response": {
"output": [],
"outputEncodings": [],
"writable": true,
"_last": false,
"chunkedEncoding": false,
"shouldKeepAlive": true,
"useChunkedEncodingByDefault": true,
"_hasBody": true,
"_trailer": "",
"finished": false,
"socket": {
"_handle": {
"writeQueueSize": 0,
"socket": "[Unknown]",
"onread": "[Unknown]"
},
"_pendingWriteReqs": "[Unknown]",
"_flags": "[Unknown]",
"_connectQueueSize": "[Unknown]",
"destroyed": "[Unknown]",
"bytesRead": "[Unknown]",
"bytesWritten": "[Unknown]",
"allowHalfOpen": "[Unknown]",
"writable": "[Unknown]",
"readable": "[Unknown]",
"server": "[Unknown]",
"ondrain": "[Unknown]",
"_idleTimeout": "[Unknown]",
"_idleNext": "[Unknown]",
"_idlePrev": "[Unknown]",
"_idleStart": "[Unknown]",
"_events": "[Unknown]",
"ondata": "[Unknown]",
"onend": "[Unknown]",
"_httpMessage": "[Unknown]"
},
"connection": "[Unknown]",
"_events": "[Unknown]",
"_headers": "[Unknown]",
"_headerNames": "[Unknown]",
"_pipeCount": "[Unknown]"
},
"headers": "[Unknown]",
"target": "[Unknown]",
"_pipeCount": "[Unknown]",
"method": "[Unknown]",
"url": "[Unknown]",
"query": "[Unknown]",
"ended": "[Unknown]"
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.