You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

作为CouchDB附件的PouchDB JS文件无法正常加载问题排查

解决ReferenceError: PouchDB is not defined 及304缓存问题

我来帮你拆解一下这个问题,从几个关键点入手排查:

1. 先修复HTML结构的低级错误(避免后续连锁问题)

你把<div id="practice">放在了<head>标签里,这不符合HTML规范——<head>只能放元数据、脚本引用这类非可视化内容,浏览器虽然会自动把这个div移到body里,但可能导致document.getElementById('practice')在脚本执行时找不到元素。先把它移到<body>里:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <script src="/repository/b/pouchdb.min.js" type="text/javascript"></script>
    <title>practice</title>
</head>
<body>
    <div id="practice"></div> <!-- 移到body内,确保能被正确获取 -->
    <div id="app"></div>
    <script src="/repository/b/build.js" type="text/javascript"></script>
    <script src="/repository/b/store.js" type="text/javascript"></script>
</body>
</html>

2. 304缓存是核心嫌疑:旧缓存的PouchDB文件可能损坏

304状态码意味着浏览器直接使用了本地缓存的资源,没有向服务器重新请求。如果你的缓存里的pouchdb.min.js是不完整的、损坏的,或者是一个没有暴露全局PouchDB变量的版本,就会触发ReferenceError。

试试这些解决办法:

  • 强制刷新缓存:Chrome里按Ctrl+Shift+R(Windows/Linux)或Cmd+Shift+R(Mac),强制重新加载所有资源,跳过本地缓存。
  • 验证PouchDB文件完整性:直接在浏览器地址栏输入http://localhost:5984/repository/b/pouchdb.min.js,查看文件内容是否完整,是否包含PouchDB的定义。如果文件是空的或者乱码,重新上传正确的PouchDB文件到CouchDB的附件中。
  • 添加版本号绕过缓存:修改PouchDB的引用为<script src="/repository/b/pouchdb.min.js?v=1.0" type="text/javascript"></script>,版本号可以随便改,这样浏览器会认为是新资源,重新请求而不用缓存。

3. 优化脚本执行时机,避免加载顺序问题

虽然PouchDB的脚本在head里,store.js在body末尾,但如果缓存的PouchDB文件加载延迟,store.js执行时可能PouchDB还没初始化。把store.js的代码包裹在DOMContentLoaded事件里,确保所有资源加载完成后再执行:

document.addEventListener('DOMContentLoaded', function() {
    var db = new PouchDB('http://localhost:5984/repository');
    var b = document.getElementById('practice');
    
    db.info()
        .then(function(info) {
            // 把对象转成字符串,不然会显示[object Object]
            b.innerHTML = JSON.stringify(info, null, 2);
        })
        .catch(function(err) {
            // 加上错误捕获,方便排查问题
            b.innerHTML = '获取数据库信息失败:' + err.message;
        });
});

另外,你之前直接把info对象赋值给innerHTML,会显示[object Object],用JSON.stringify(info, null, 2)可以格式化显示具体内容,更容易调试。

4. 检查CouchDB附件的访问权限

虽然浏览器显示文件加载了,但CouchDB的附件可能有访问权限限制。登录CouchDB的Fauxton界面,检查repository数据库的权限设置,确保匿名用户(或者你当前登录的用户)拥有该文档附件的读取权限。如果权限不足,也可能导致资源加载异常。


内容的提问来源于stack exchange,提问作者David J.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:02:29