从Mongoose检索jsonObject

时间:2017-03-06 11:04:14

标签: node.js mongodb mongoose

我正在使用NodeJs和MongoDB以及基于mongoose Schema的模型实现服务器相关的API。所以我之前的问题是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);
  });
};

当我运行服务器时,它会像这样返回jsonArray,

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

这里我怀疑是,

在上面的代码中,task给出了这种响应。我如何获得该任务数组中的每个对象?我需要使用for循环来获取该数组中的所有对象吗?我是NodeJs和MongoDB的新手。我的服务器结构很好。现在我坚持这个。将不胜感激。

更新

    // 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:无法设置undefined的属性“name”       at /home/noorulhasan/todoListApi/api/controllers/todoListController.js:17:29       在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]应用程序崩溃 - 在开始之前等待文件更改...

更新错误 当我尝试使用myObject = {}

events.js:161       扔掉//未处理的'错误'事件       ^

  

TypeError:无法设置undefined的属性“0”       at /home/noorulhasan/todoListApi/api/controllers/todoListController.js:21:25       在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)

更新

我得到了这种输出。如何摆脱'\'符号。

"[{\"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\\\"}]\""

1 个答案:

答案 0 :(得分:1)

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

  

无法设置属性&#39; name&#39;未定义的

这意味着myOwnObject未定义,但您尝试设置myOwnObject.name

像这样初始化你的对象 -

var myOwnObject = {};

而不是

var myOwnObject;

错误现在应该消失了。

更新 - 第二个错误 -

同样的事情对于数组也是如此。您的dataArray未初始化。你需要像这样初始化它 -

var dataArray = [];

更新2 -

您正在输出\,因为您正在将JSON输出转换为单个字符串。要直接发送JSON数组,请删除JSON.stringify()方法。像这样发送回复 -

res.json(dataArray);