2

node.js、express.js、および mongodb を使用して RESTful API を作成しました。完全に機能する MongoDB コレクションからドキュメントを取得して、ルートの作成を開始しました。

コレクション文書の例

{ 
"_id" : ObjectId("51ace8c04cc8ea865df0923e"), 
"title" : "Some Example Title", 
"producer" : 
 { 
  "company" : "Your Company Name"
 } 
}

動作します - また、一般的な find() の代わりに.find ({query}) を実行しても動作します

   app.get('/something', something.findAll);
    exports.findAll = function(req, res) {
        db.collection('something', function(err, collection) {
            collection.find().toArray(function(err, items) {
                res.contentType('json');
                res.header("Access-Control-Allow-Origin", "*");
                res.header('Access-Control-Allow-Methods', 'GET, PUT');
                res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
                res.send(items);
            });
        });
    };

しかし、埋め込みドキュメント (つまりサブドキュメント) を呼び出そうとすると、dot.notation を使用して壊れます。

*動作しません*

db.something.find( { 'producer.company': 'ABC123' } )

または私がしようとしても

db.something.find( {producer: {company: 'ABC123'} } );

というエラーメッセージが表示されます。

TypeError: Converting circular structure to JSON
    at Object.stringify (native)
    at ServerResponse.res.json (../lib/response.js:185:19)
    at ServerResponse.res.send (..//lib/response.js:117:21)
    at ../routes/recipes.js:81:8
    at Collection.find (../node_modules/mongodb/lib/mongodb/collection.js:931:5)
    at ../routes/recipes.js:73:14
    at Db.collection (../lib/mongodb/db.js:462:44)
    at exports.findByCat (../routes/recipes.js:72:5)
    at callbacks (../node_modules/express/lib/router/index.js:161:37)
    at param (../node_modules/express/lib/router/index.js:135:11)

誰かが回避策を見つけるのを手伝ってくれますか、または私のアプローチにエラーがあるかどうか教えてください。

ありがとう!

4

1 に答える 1

1

あなたは基本的にこれをしました

> var a = {a:1}
undefined
> a.b = a
{ a: 1, b: [Circular] }
> JSON.stringify(a)
TypeError: Converting circular structure to JSON
    at Object.stringify (native)
    at repl:1:7
    at REPLServer.self.eval (repl.js:110:21)
    at Interface.<anonymous> (repl.js:239:12)
    at Interface.EventEmitter.emit (events.js:95:17)
    at Interface._onLine (readline.js:202:10)
    at Interface._line (readline.js:531:8)
    at Interface._ttyWrite (readline.js:760:14)
    at ReadStream.onkeypress (readline.js:99:10)
    at ReadStream.EventEmitter.emit (events.js:98:17)

コードのどこかで、自己参照オブジェクトを作成しています

于 2013-08-12T10:34:05.590 に答える