我正在使用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 回答
您得到的错误是由于
myOwnObject
未定义 . 在开始设置属性之前,需要初始化对象 . 你得到的错误提到了这意味着
myOwnObject
未定义,但您正在尝试设置myOwnObject.name
.像这样初始化你的对象 -
代替
错误现在应该消失了 .
Update - 第二个错误 -
对于数组也是如此 . 您的
dataArray
未初始化 . 你需要像这样初始化它 -Update 2 -
您在输出中获得了
\
,因为您正在将JSON输出转换为单个字符串 . 要直接发送JSON数组,请删除JSON.stringify()
方法 . 发送这样的回复 -