Mongoose文档转换为JSON

问题描述 投票:0回答:1

我正在尝试将一组猫鼬文档作为普通的旧JavaScript对象返回。我有一个user.js模块来处理数据库的查询-

module.exports = function() {
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback() {
    console.log('connection successful');
});
var outingSchema = mongoose.Schema({
    id : String,
    location : String,
    date : Date,
    participantCount : Number,
    confirmedParticipantCount : Number,
    group : String
});
var Outing = mongoose.model('Outing', outingSchema);

this.dashboard = function() {
    var result = Outing.find({}, function(err, outings) {
        console.log('##################');
    });
    db.close();
    return result;
}
}

这是我的主要server.js文件-

io.of('/user').on('connection', function(socket) {
console.log('Incoming connection to ' + socket.namespace.name);
var User = require('./real/user.js');
var UserObject = new User();
socket.on('dashboard', function(data) {
    socket.send(JSON.stringify(UserObject.dashboard(), null, 3));
})
});

就目前而言,这总是会导致异常-

TypeError: Converting circular structure to JSON

我假设这是因为猫鼬Document对象具有某种圆形结构。如何使用dashboard()方法仅返回可以使用JSON.stringify()转换为JSON的常规JavaScript对象?

我已经尝试遍历每个文档上的outings' and calling the toObject()`方法,但是它也只返回猫鼬Document对象。

还有奇怪的是,据我所知,语句console.log('##################');从未执行过(我在控制台中看不到输出)。这是因为它在回调函数中吗?其他回调函数中的其他console.log()语句也可以正常工作。

javascript json node.js mongodb mongoose
1个回答
1
投票

您需要使用'dashboard'函数作为回调。

this.dashboard = function(callback) {
    Outing.find({}, callback);
};

您很少希望在带有节点的请求之间实际关闭数据库。

socket.on('dashboard', function(data) {
    UserObject.dashboard(function(err, results){
      if(err){
        //send the error to the socket
      }
      socket.send(JSON.stringify(results);
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.