mongoose文档转换为JSON

mongoose document to JSON

本文关键字:JSON 转换 文档 mongoose      更新时间:2023-09-26

我正试图将一组mongoose文档作为普通的旧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

我认为发生这种情况是因为mongoose Document对象具有某种圆形结构。如何让dashboard()方法只返回可以使用JSON.stringify()转换为JSON的常规JavaScript对象?

我已经尝试在每个文档上循环outings' and calling thetoObject()`方法,但这也只是返回mongooseDocument对象。

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

您需要将"dashboard"函数作为回调函数。

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

您很少希望在使用node的请求之间关闭数据库。

socket.on('dashboard', function(data) {
    UserObject.dashboard(function(err, results){
      if(err){
        //send the error to the socket
      }
      socket.send(JSON.stringify(results);
    });
});