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

PouchDB调用get()报TypeError: cb is not a function如何解决

问题解答

错误原因

  • 直接诱因:代码中存在多余的无参数调用db.get(),PouchDB的get()方法要求至少传入文档ID作为必填参数,不传参数时内部期望的回调函数cb不存在,因此抛出TypeError: cb is not a function错误,删除这行多余调用即可解决该报错。
  • 其他潜在错误:
    1. jQuery对象取值应该用.val()方法,直接访问.value会得到undefined,导致后续校验永远失败
    2. 循环逻辑写死i < 2,当存储的用户数超过2时会漏匹配
    3. 逗号表达式var data = ("db value", info);写法冗余,实际等价于var data = info,无额外作用
    4. 如果你的用户是单独存储为多个文档而非存在同一份数组文档里,用db.get(table.users)本身也无法获取到所有用户数据,需要替换为db.allDocs()查询全量用户文档。

优化实现方案

推荐使用async/await语法替换回调写法,逻辑更清晰易读,优化后的代码如下:

const submit = $("input[name='submit']");

async function logIn() {
  // 修正jQuery取值方式,同时做空格过滤
  const username = $("input[name='username']").val().trim();
  const password = $("input[name='password']").val().trim();

  // 提前做输入合法性校验
  if (!username || !password) {
    console.log("用户名和密码不能为空");
    return;
  }

  try {
    // 获取用户列表文档
    const userList = await db.get(table.users);
    // 匹配用户信息
    const isValidUser = userList.some(user => user.name === username && user.pass === password);

    if (isValidUser) {
      console.log(`${username} 登录成功!`);
      // 此处可补充登录后逻辑,比如存储登录状态、页面跳转等
    } else {
      console.log("用户名或密码错误");
    }
  } catch (err) {
    console.error("数据读取失败:", err);
  }
}

submit.click(() => logIn());

额外优化建议

  • 禁止明文存储密码:生产环境需要用bcrypt等哈希算法对密码加密后再存储,校验时将用户输入的密码做同等哈希处理后再对比,避免数据泄露导致密码明文丢失。
  • 适配存储结构:如果你的用户是分文档存储,将db.get(table.users)替换为db.allDocs({include_docs: true})获取全量用户文档后再匹配即可。

内容的提问来源于stack exchange,提问作者greyowl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:27:05