我已经包含了 YDN DB 文件 (ydn-db-isw-core-crypt-qry-dev.js) 来加密 Angular 应用程序中的索引 DB。它在 socket.io-1.4.5.js 之后的 index.html 正文部分中添加,加载器 spinner.head 部分包括 plivo.min.js 库-
<script type="text/javascript" src="./assets/ydnCoreCryptQryDev.js"></script>
早些时候我使用的是普通的 IndexDB,一切进展顺利。但是在开发人员工具中可以看到收集的详细信息。
现在包含 YDN DB 后,它只是在窗口会话存储中设置用户凭据并完成 Db 初始化后继续加载主页。
数据库初始化代码是 -
function open() {
var deferred = $q.defer();
var options = {
Encryption: {
encryptKey: false, // optional encrypt primary key
secrets: [{
name: 'dddd',
key: 'xxxxxxxxxx'
}]
}
};
var schema = {
stores:[{
name:'profile',
encrypted: true
},{
name:'contacts',
encrypted: true
},{
name:'archive',
encrypted: true
},{
name:'avatars',
encrypted: true
},{
name:'groups',
encrypted: true
},{
name:'notifications',
encrypted: true
}]
};
var db = new ydn.db.Storage('nowconferdb', schema, options);
db.onReady(function() {
console.log('DB is initialized');
avatarstorage.setDB(db);
contactstorage.setDB(db);
profilestorage.setDB(db);
groupstorage.setDB(db);
archivestorage.setDB(db);
notificationstorage.setDB(db);
deferred.resolve(true);
});
db.addEventListener('fail', function (event) {
var err = event.getError();
if (err.name == 'versionchange') {
console.log('The application is updated, please refresh to upgrade.');
avatarstorage.setup(db);
contactstorage.setup(db);
profilestorage.setup(db);
groupstorage.setup(db);
archivestorage.setup(db);
notificationstorage.setup(db);
} else {
console.log('connection failed with ' + err.name + ' by ' + err.message);
db = null; // no operation can be placed to the database instance
}
deferred.reject(false);
});
return deferred.promise;
}
在以下应该执行之后,它也没有执行,我将数据库传递给多个服务以供使用。-
storageservice.open().then(function() {
console.log('post initializing storageservice'); // <<<<
if (me.getAuth()) {
console.log('user is authenticated'); // <<<<
me.loadMe(sessionUser._id).then(function(profile) {
me.setMe(angular.extend(profile, sessionUser)).then(function() {
console.log('setting user');
deferred.resolve();
},
function() {
deferred.reject(1);
});
}, function() {
me.setMe(sessionUser).then(function() {
console.log('setting user info');
deferred.resolve();
}, function() {
deferred.reject(1);
});
});
}
else {
console.log('user is not authenticated');
me.loadMe(sessionUser._id).then(function(profile) {
console.log('loaded profile:'+JSON.stringify(profile));
deferred.resolve(profile);
}, function() {
me.setMe(sessionUser).then(function() {
console.log('setting user details');
deferred.resolve();
}, function() {
console.log('failed to set user');
deferred.reject(1);
});
});
}
});
有人可以帮忙吗。
非常感谢。
更新 -
使用回调方法代替 deferred.promise 并且代码开始执行到下一个块(获取“初始化存储服务”的控制台,“用户已通过身份验证”)。
deferred.promise 看起来一切都很好,有点尴尬!