在为我的Ionic项目测试pouchDB之后,我尝试用crypto-bag加密我的数据。但我使用设计文档时遇到问题。我使用了以下代码:
我的一份设计文件:
var allTypeOne = {
_id: '_design/all_TypeOne',
views: {
'alle_TypeOne': {
map: function (doc) {
if (doc.type === 'type_one') {
emit(doc._id);
}
}.toString()
}
}
};
对于init我的数据库:
function initDB() {
_db = new PouchDB('myDatabase', {adapter: 'websql'});
if (!_db.adapter) {
_db = new PouchDB('myDatabase');
}
return _db.crypto(password)
.then(function(){
return _db;
});
// add a design document
_db.put(allTypeOne).then(function (info) {
}).catch(function (err) {
}
}
获取type_one的所有文档:
function getAllData {
if (!_data) {
return $q.when(_db.query('all_TypeOne', { include_docs: true}))
.then(function(docs) {
_data = docs.rows.map(function(row) {
return row.doc;
});
_db.changes({ live: true, since: 'now', include_docs: true})
.on('change', onDatabaseChange);
return _data;
});
} else {
return $q.when(_data);
}
}
此代码可以在不使用加密袋的情况下正常工作,但如果我插入_db.crypto(...),则列表中不会显示任何数据。谁能帮我?提前谢谢!
答案 0 :(得分:0)
我猜你在加密调用完成之前就已经发生了这个问题。请记住,javascript是异步的。因此,在设计文档之前,请等待加密调用完成。然后在完成后使用回调来访问您的数据库。如下所示:
function initDB(options) {
_db = new PouchDB('myDatabase', {adapter: 'websql'});
if (!_db.adapter) {
_db = new PouchDB('myDatabase');
}
_db.crypto(password)
.then(function(){
// add a design document
_db.put(allTypeOne).then(function (info) {
options.success(_db);
})
.catch(function (err) { console.error(err); options.error(err)})
.catch(function (err) { console.error(err); options.error(err);})
}
}
initDB({
success:function(db){
db.query....
}
)