2017-03-06 49 views
0

我正在使用基于mongoose模式的基于模式的NodeJs和MongoDB实现与服务器相关的API。所以我刚才的问题是here从Mongoose中检索jsonObject

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

当我运行它返回jsonArray这样的服务器,

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

这里我的疑问是,

在上面的代码中

,任务给这种的回应。我如何获得该任务数组中的每个对象?我是否需要使用for循环来获取该数组中的所有对象?我是NodeJs和MongoDB的新手。我构建了良好的server.Now我坚持这一点。?帮助将不胜感激。

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...

更新错误 当我与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 [n]'选择一个特定的元素,或者使用任何类型的循环或迭代函数。 –

+0

@JyotmanSingh感谢您的帮助。我尝试了上述方法。我更新了我的问题。 – Noorul

回答

1

你所得到的错误是由于myOwnObject是不确定的。在开始设置属性之前,您需要初始化对象。你所得到的错误提到

Cannot set property 'name' of undefined

这意味着myOwnObject没有定义,但你要设置myOwnObject.name

初始化你的对象是这样 - 的

var myOwnObject = {}; 

代替

var myOwnObject; 

错误现在应该不见了。

更新 - 对于第二错误 -

如上同样的事情也是阵列如此。您的dataArray未初始化。您需要初始化像这样 -

var dataArray = []; 

更新2 -

你得到你的输出\,因为你是你的JSON输出转换为一个字符串。要直接发送JSON数组,请删除JSON.stringify()方法。发送这样的回复 -

res.json(dataArray);  
+0

我已经试过了。我它给出了其他错误。 – Noorul

+0

我更新了我的错误。 – Noorul

+0

@Ahamed检查更新后的答案。 –