我有以下问题:
在我的应用程序中,我有一个模型用于mongoDb-DB中的所有会话。
这个想法是,模型继承自抽象模型......所以我不必再次编写所有标准函数......比如获取集合等。
这就是我的sessionModel的代码:
var baseProvider = require('./abstract/model').abstractProvider;
var queryString = require('querystring');
var _collection = 'sessions';
sessionProvider = function() {
baseProvider.apply(this, [_collection]);
};
sessionProvider.prototype = new baseProvider(_collection);
sessionProvider.prototype.deleteSession = function(sessionId){
this.getCollection(function(err,sessionCollection){
sessionCollection.remove({_id: sessionId},function(err,result){
console.log(err,result);
});
});
}
exports.sessionProvider = sessionProvider;
然后在我的baseProvider(我的“抽象模型”)中:
var Db = require('mongodb').Db;
var Connection = require('mongodb').Connection;
var Server = require('mongodb').Server;
var BSON = require('mongodb').BSON;
var ObjectID = require('mongodb').ObjectID;
abstractProvider = function(collectionName) {
var dbName = process.settings['shopconfig'].db.dbName;
var dbHost = process.settings['shopconfig'].db.dbHost;
var dbPort = process.settings['shopconfig'].db.dbPort;
this.db= new Db(dbName, new Server(dbHost, dbPort, {auto_reconnect: true}, {}));
this.db.open(function(){});
this.collectionName = collectionName;
};
abstractProvider.prototype.getCollection= function(callback) {
this.db.collection(this.collectionName, function(error, abstractCollection) {
if( error ) callback(error);
else callback(null, abstractCollection);
});
};
exports.abstractProvider = abstractProvider;
我ve shortend the codeparts to the important parts, don
感到烦躁。
问题是,执行了removefunction,调用了回调但是未定义了err-object和result-object。
以这种方式在集合上调用remove是错误的吗?
我有点困惑......因为其他一切都很好......插入东西,更新等等。
编辑:会话ID填写顺便说一句,我已经看了那个,因为我想也许它会是空的......但不是。即使没有条件调用remove()也会失败......
谢谢你的时间。 =)答案 0 :(得分:0)
sessionId是... db.bson_serializer.ObjectID的实例还是你把它推到一个将它转换为十六进制字符串的会话结构?后者发生在Express中的Cookie和Redis存储以及一般的cookie存储中。如果你有一个db引用,可能值得检查:
sessionId = (typeof sessionId == "string") ? new db.bson_serializer.ObjectID(sessionId) : sessionId