首页 文章

从Mongoose检索jsonObject

提问于
浏览
0

我正在使用NodeJs和MongoDB实现与服务器相关的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的新手 . 我的服务器结构很好 . 现在我坚持这个 . 帮助将不胜感激 .

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

Error

events.js:161 throw er; //未处理的'错误'事件^

TypeError:无法在model.Query的/home/noorulhasan/todoListApi/api/controllers/todoListController.js:17:29设置未定义的属性'name' . (/home/noorulhasan/node_modules/mongoose/lib/model.js:3433:16)/home/noorulhasan/node_modules/kareem/index.js:273:21 athome/noorulhasan/node_modules/kareem/index.js :127:16在_combinedTickCallback(internal / process / next_tick.js:67:7)at process._tickCallback(internal / process / next_tick.js:98:9)[nodemon] app崩溃 - 在开始之前等待文件更改.. .

UPDATE ERROR 当我尝试使用myObject = {}

events.js:161 throw er; //未处理的'错误'事件^

TypeError:无法在model.Query的/home/noorulhasan/todoListApi/api/controllers/todoListController.js:21:25设置undefined属性'0' . (/home/noorulhasan/node_modules/mongoose/lib/model.js:3433:16)/home/noorulhasan/node_modules/kareem/index.js:273:21 athome/noorulhasan/node_modules/kareem/index.js :127:16在_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\\\"}]\""

1 回答

  • 1

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

    无法设置undefined的属性'name'

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

    像这样初始化你的对象 -

    var myOwnObject = {};
    

    代替

    var myOwnObject;
    

    错误现在应该消失了 .

    Update - 第二个错误 -

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

    var dataArray = [];
    

    Update 2 -

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

    res.json(dataArray);
    

相关问题