我正在尝试将一组猫鼬文档作为普通的旧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()
语句也可以正常工作。
您需要使用'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);
});
});