我有一个节点应用程序,它使用 CouchDB 作为数据库,在客户端使用 PouchDB。要登录,将向节点服务器发送请求,节点服务器使用 CouchDB 实例对用户的凭据进行身份验证,然后将 cookie 发送回客户端。问题是,重新启动浏览器并登录后,当 Pouch 尝试连接到 DB 时,CouchDB 会发送 401 Unauthorized 响应,并且浏览器会弹出默认登录弹出窗口。即使 AuthSession cookie 位于浏览器中,也会发生这种情况。
Chrome 中的完整错误是:Failed to load resource: the server responded with a status of 401 (Unauthorized) http://localhost:5984/user/?_nonce=rItPZR1fgbHrwn0a
在 Chrome 弹出框中输入用户凭据并刷新页面后,它会正常加载。转到列出的页面并输入用户凭据会提供有关用户的各种元数据。
我认为发生这种情况是因为 PouchDB 实际上并不使用节点服务器发送的 AuthSession 令牌,而是使用在用户收到 401 提示后由 CouchDB 提供给它的 cookie。有没有办法解决这个问题?
提前致谢。
TL;DR:我想要一个像 Ember Data 一样的 PouchDB 数据库:首先从本地存储中获取,如果找不到,则转到远程。在这两种情况下仅复制该文档。
Post我的 PouchDB/CouchDB 服务器中有一个名为的文档类型。我希望 PouchDB 查看本地存储,如果它有文档,则返回文档并开始复制。如果没有,请转到远程 CouchDB 服务器,获取文档,将其存储在本地 PouchDB 实例中,然后开始仅复制该文档。在这种情况下,我不想复制整个数据库,只想复制用户已经获取的内容。
我可以通过写这样的东西来实现它:
var local = new PouchDB('local');
var remote = new PouchDB('http://localhost:5984/posts');
function getDocument(id) {
return local.get(id).catch(function(err) {
if (err.status === 404) {
return remote.get(id).then(function(doc) {
return local.put(id);
});
}
throw error;
});
}
Run Code Online (Sandbox Code Playgroud)
这也不能解决复制问题,但这是我想做的事情的总体方向。
我想我可以自己编写这段代码,但我想知道是否有一些内置的方法可以做到这一点。
在开发一款儿童游戏 Android 应用程序时,我们决定跳过登录,因为它妨碍了孩子们的参与。所以现在我必须将用户的用户数据保存在服务器上。但由于没有身份验证,我如何设法将数据保存在服务器上。我猜许多游戏化应用程序没有登录功能。他们如何设法将用户数据保存在中央服务器上?
我在应用程序端使用 pouch-db 在本地存储数据。所以我尝试使用 couch-db 在后端存储数据。但我再次陷入了身份验证部分。
该PouchDB手册建议使用Date().toJSON()生成每个文档的新ID。所有的 javascript 运行时都保证它Date().toJSON()永远是唯一的吗?
我正在尝试创建简单的 Vue + CouchDB 应用程序。使用 Vanilla JS 可以正常工作,但我无法通过 Promise 或异步函数从数据库获取数据到我的 vue 实例。这是我的代码:
应用程序.html
<div id="vue-app">
<table>
<thead>
<tr>
<th>{{ tableHead.name }}</th>
<th>{{ tableHead.lastname }}</th>
</tr>
</thead>
<tbody>
<tr v-for="data in tableData">
<td>{{ data.name }}</td>
<td>{{ data.lastname }}</td>
</tr>
</tbody>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
应用程序.js
const db = new PouchDB('testdb')
const couch = {
fetchData: async function () {
var dbData = await db.allDocs({
include_docs: true,
descending: true
}).then(function (result) {
var objects = {}
result.rows.forEach(function (data) {
objects[data.id] = data.doc
})
return …Run Code Online (Sandbox Code Playgroud) 我想将 PouchDB 与 SvelteKit 一起使用。我已将 pouchdb-7.2.1.js 复制到 SvelteKit 中的/src/libd 并将其重命名为 pouchdb.js。Pouchdb 应该在浏览器中运行。因此我使用 ssr=false 来抑制服务器端渲染。我在导入语句中遇到第一个错误。这是我的第一个非常短的页面 (couchdb.svelte):
<script context="module">
export const ssr = false;
</script>
<script>
import PouchDB from '$lib/pouchdb.js';
</script>
Run Code Online (Sandbox Code Playgroud)
我收到错误 500
import not found: PouchDB
Run Code Online (Sandbox Code Playgroud)
我尝试了很多不同的版本,但都没有成功。例如:
import PouchDB from 'pouchdb-browser'; (After npm i pouchdb-browser)
import PouchDB from 'pouchdb'; (After npm i pouchdb)
Run Code Online (Sandbox Code Playgroud)
使用 pouchdb 的正确方法是什么?
我试图在移动(Android)应用程序中一起使用上述三个.当我在firefox(20),Ubuntu(12.04)中运行它时,它的工作非常好,但当我将它加载到手机(或Android模拟器)时,它似乎无法存储数据.在firefox中运行时,数据存储在sqlite数据库中的用户配置文件目录中,但是有应用程序?如何告诉PouchDB在哪里存储数据库?我该怎么做?
- 附加信息
我一直在使用PouchDB适配器类型进行更多测试 - 在firefox和chrome中.firefox不支持WebSQL,因此使用chrome来测试它.这是我在index.html中加载的脚本.
<link rel="stylesheet" href="jquery.mobile/jquery.mobile-1.3.1.min.css" />
<script type="text/javascript" charset="utf-8" src="jquery.mobile/jquery-1.9.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="jquery.mobile/jquery.mobile-1.3.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova-2.6.0.js"></script>
<script type="text/javascript" charset="utf-8" src="jquery.mobile/pouch-20130419/pouchdb-nightly.js"></script>
<script type="text/javascript" charset="utf-8" src="testa.js"></script>
Run Code Online (Sandbox Code Playgroud)
以下是生成这些日志的一些相关代码
console.log("Creating the database" + JSON.stringify(userdata));
Pouch('idb://'+userdata.username, function(err, database){
if (err) {
console.log('Failed to create database:'+ JSON.stringify(err));
return {'ok': false, 'reason':'Failed to create database:'+ userdata.username};
} else {
pdb = database;
console.log('Created database:'+ JSON.stringify(userdata.username));
Pouch('idb://cred', function(err, credb){
if (err) {
console.log('Failed to create database: cred'+ JSON.stringify(err));
//
return {'ok': false, …Run Code Online (Sandbox Code Playgroud) 在单页面应用程序上工作我必须编写大量的样板代码才能与服务器端数据同步.
PouchDB为这个问题提供了一个优雅的解决方案,允许在客户端本地访问数据.
我不明白的是,在数据库太大而不能完全适合浏览器内存的情况下,Pouch是否适合作为数据库代理.
据我所知,Pouch可以复制整个远程数据库,因此可以在整个数据库适合浏览器内存的情况下使用.
假设我有一个包含所有维基百科文章的数据库,我想在客户端操作其中的一部分.复制不是要走的路,需要的是代理.例如,当在客户端本地发出查询时,只应传输匹配的结果.仅对复制值运行查询是不可行的,因为无法在本地复制整个数据库.
考虑到我的关系数据库背景,我正在努力了解IONIC 2中的数据存储。阅读了许多有关此问题的教程和文章之后,我对如何进行有一个一般性的了解,但是希望我能对我有所帮助。正确的轨道上。我热衷于使用NoSQL,因此许多使用Ionic的SQL Storage的教程都无济于事。
到目前为止,我倾向于使用Ionic 2的Storage或Pouch DB。我看不出有什么区别。当作为本机应用程序运行时,它们都使用SQLite,或者在IndexDB或WebSQL上使用回退。
这里推荐的做法是什么?
我正在尝试将PouchDB导入我的Angular应用程序.我测试了不同的导入方法:
import PouchDB from 'pouchdb';
import * as PouchDB from 'pouchdb';
Run Code Online (Sandbox Code Playgroud)
我正在使用它像下面的服务:
database: PouchDB.Database = new PouchDB(DATABASE_URL);
Run Code Online (Sandbox Code Playgroud)
如果我这样做:import PouchDB from 'pouchdb',我收到以下错误消息:
src/app/core/pouchdb/pouchdb.service.ts(3,8):错误TS1192:模块'"{PATH_OF_PROJECT}/node_modules/@ types/pouchdb/index"'没有默认导出.
如果我这样做:import * as PouchDB from 'pouchdb',我收到以下错误消息:
错误TypeError:PouchDB不是新PouchDBService的构造函数
以下是不同包的版本:
提前感谢您的回答.