2017-03-06 18 views
0

mongooseスキーマベースのモデルでNodeJsとMongoDBを使用してサーバー関連のAPIを実装しています。私の疑問は、その上記のコードでmongooseからjsonObjectを取得

あるので、私はそれがこのようjsonArrayを返すサーバーを実行すると私の以前の質問はここで、

[ 
    { 
    "_id": "58ba4c9c03e10b16d140775f", 
    "name": "Noorul ahamed", 
    "__v": 0, 
    "status": [ 
    "pending" 
    ], 
    "Created_date": "2017-03-04T05:11:56.590Z" 
}, 
.... 
... 
... 
] 

here

'use strict'; 


mongoose = require('mongoose'), 
Task = mongoose.model('Tasks'); 

exports.list_all_tasks = function(req, res) { 
    Task.find({}, function(err, task) { 
    if (err){ 
     res.send(err); 
    } 
    // console.log('Web Server started, waiting for connections...'+task); 
    res.json(task); 
    }); 
}; 

た、タスクは、この種を与えますレスポンスのどのように私はそのタスク配列のすべてのオブジェクトを取得するのですか?その配列からすべてのオブジェクトを取得するためにforループを使用する必要がありますか?私はNodeJsとMongoDBが初めてです。私はうまくサーバーを構造化しました。今私はこれにこだわっています。ヘルプは高く評価されます。

UPDATE

// var myOwnObject = new mongoose.Schema({ name: 'string', id: 'string',status:'string',createdDate:'String' }); 
    //  var myOwnObject = {}; 

    var dataArray; 
    for (var i = 0; i < task.length; i++) { 
     var userObject = task[i]; 
     myOwnObject.name=userObject.name; 
     myOwnObject.id=userObject._id; 
     myOwnObject.status=userObject.status[0]; 
     myOwnObject.createdDate=userObject.Created_date; 
     dataArray[i]=myOwnObject; 
    } 
    res.json(JSON.Stringify(dataArray)); 

エラー

events.js:161 スローえー。 //未処理の 'エラー' イベント ^

TypeError: Cannot set property 'name' of undefined at /home/noorulhasan/todoListApi/api/controllers/todoListController.js:17:29 at model.Query. (/home/noorulhasan/node_modules/mongoose/lib/model.js:3433:16) at /home/noorulhasan/node_modules/kareem/index.js:273:21 at /home/noorulhasan/node_modules/kareem/index.js:127:16 at _combinedTickCallback (internal/process/next_tick.js:67:7) at process._tickCallback (internal/process/next_tick.js:98:9) [nodemon] app crashed - waiting for file changes before starting...

更新エラー iはmyObjectという= {}

events.jsと試み:161 スローER。 //未処理の 'エラー' イベント ^

TypeError: Cannot set property '0' of undefined at /home/noorulhasan/todoListApi/api/controllers/todoListController.js:21:25 at model.Query. (/home/noorulhasan/node_modules/mongoose/lib/model.js:3433:16) at /home/noorulhasan/node_modules/kareem/index.js:273:21 at /home/noorulhasan/node_modules/kareem/index.js:127:16 at _combinedTickCallback (internal/process/next_tick.js:67:7) at process._tickCallback (internal/process/next_tick.js:98:9)

UPDATE

私は、出力のこの種を取得しています。どのように '\'記号を取り除くか。

"[{\"name\":\"Ahamed\",\"id\":\"58bac0fc2cf0894f071e41c0\",\"createdDate\":\"2017-03-04T13:28:28.759Z\"}]

私は、次の方法を試してみました。

var jsonData=JSON.stringify(dataArray); 
    var updateJson = jsonData.replace('"\"', ""); 
    res.json(JSON.stringify(updateJson)); 

が、それは以下のような余分な記号を追加し、

"\"[{\\\"name\\\":\\\"Ahamed\\\",\\\"id\\\":\\\"58bac0fc2cf0894f071e41c0\\\",\\\"status\\\":\\\"pending\\\",\\\"createdDate\\\":\\\"2017-03-04T13:28:28.759Z\\\"}]\""

+2

あなたの 'task'は単なる通常の配列です。任意の通常の配列と同様に、その内部の要素にアクセスできます。あなたは 'task [n]'で特定の要素を選択するか、任意の種類のループまたはイテレーター関数を使用することができます。 –

+0

@JyotmanSinghご協力いただきありがとうございます。私は上記の方法で試しました。私は私の質問を更新しました。 – Noorul

答えて

1

あなたが取得しているエラーは、未定義さmyOwnObjectによるものです。プロパティの設定を開始する前に、オブジェクトを初期化する必要があります。あなたが取得しているエラーは、それが定義されていませんが、あなたがmyOwnObject.nameを設定しようとしているmyOwnObject意味

Cannot set property 'name' of undefined

ことを言及しています。

は、このようなあなたのオブジェクトを初期化 -

var myOwnObject = {}; 

代わりの

var myOwnObject; 

エラーは今なくなってしなければなりません。

更新 - 第2のエラーについて -

上記と同様のものがアレイについても同様です。 dataArrayは初期化されていません。あなたはこのようにそれを初期化する必要がある -

var dataArray = []; 

アップデート2 -

あなたは、単一の文字列にあなたのJSON出力を変換しているので、あなたは、あなたの出力に\を得ています。 JSON配列を直接送信するには、JSON.stringify()メソッドを削除してください。このような応答を送ってください -

res.json(dataArray);  
+0

私はすでにそれを試みました。私は他のエラーを出します。 – Noorul

+0

私は自分のエラーを更新しました。 – Noorul

+0

@Ahamedは更新された答えを確認します。 –

関連する問題