Skip to content

[db0] [d1] binding DATABASE not found #222

@Skyost

Description

@Skyost

Environment

{
  "name": "open-authenticator-backend",
  "version": "1.0.0",
  "private": true,
  "type": "module",
  "scripts": {
    "build": "nitro build",
    "dev": "nitro dev",
    "preview": "nitro preview"
  },
  "imports": {
    "#*": "./*"
  },
  "devDependencies": {
    "@eslint/js": "^10.0.1",
    "@stylistic/eslint-plugin": "^5.10.0",
    "@types/ms": "^2.1.0",
    "@types/nodemailer": "^7.0.11",
    "@types/semver": "^7.7.1",
    "eslint": "^10.0.3",
    "globals": "^17.4.0",
    "typescript-eslint": "^8.57.1"
  },
  "dependencies": {
    "@puzzmo/revenue-cat-webhook-types": "^1.1.0",
    "@sentry/core": "^10.45.0",
    "arctic": "^3.7.0",
    "dotenv": "^17.3.1",
    "jiti": "^2.6.1",
    "jose": "^6.2.2",
    "ms": "^2.1.3",
    "nitro": "latest",
    "nodemailer": "^8.0.3",
    "semver": "^7.7.4",
    "smob": "^1.6.1",
    "xss": "^1.0.15"
  }
}

node --version
v22.22.0

Reproduction

Configure Nitro to use a Cloudflare D1 database :

  database: {
    default: {
      connector: 'cloudflare-d1',
      options: {
        bindingName: 'DATABASE',
      },
    },
  },

And try to use useDatabase().

Describe the bug

I'm currently trying to use useDatabase() to do some basic operations on my Cloudflare D1 database (see https://github.com/openauthenticator-app/backend/blob/dev/routes/admin/reset.ts). But I end up with the following error : [db0] [d1] binding DATABASE not found.

Note that my bindings are correctly configured on Cloudflare using wrangler.json :

Image

Extra details

Here's the log I have on my local development server :

> open-authenticator-backend@1.0.0 build
> nitro build

✔ Generated public dist                                                                                                                                             nitro 21:26:53
ℹ Initializing prerenderer                                                                                                                                          nitro 21:26:53
ℹ Generated dist/nitro.json                                                                                                                                               21:26:53
ℹ Prerendering 1 routes                                                                                                                                             nitro 21:26:53
  ├─ / (9ms)                                                                                                                                                         nitro 21:26:53
ℹ Prerendered 1 routes in 0.405 seconds                                                                                                                             nitro 21:26:53
ℹ Building server (builder: rolldown, preset: cloudflare-pages, compatibility date: 2026-03-22)                                                                     nitro 21:26:53

 WARN  inlineDynamicImports option is ignored because the codeSplitting option is specified.                                                                                       

ℹ Generated dist/nitro.json                                                                                                                                               21:26:54
✔ Server built in 160ms                                                                                                                                             nitro 21:26:54
  ├─ dist/_worker.js/_chunks/auth.mjs (22.5 kB) (4.84 kB gzip)
  ├─ dist/_worker.js/_chunks/headers.mjs (1.8 kB) (658 B gzip)
  ├─ dist/_worker.js/_chunks/nitro.mjs (1.17 kB) (515 B gzip)
  ├─ dist/_worker.js/_chunks/package.mjs (136 B) (126 B gzip)
  ├─ dist/_worker.js/_chunks/ratelimit.mjs (9.28 kB) (2.65 kB gzip)
  ├─ dist/_worker.js/_chunks/session.mjs (6.1 kB) (1.7 kB gzip)
  ├─ dist/_worker.js/_chunks/storage.mjs (4.45 kB) (1.8 kB gzip)
  ├─ dist/_worker.js/_chunks/task.mjs (1.56 kB) (730 B gzip)
  ├─ dist/_worker.js/_chunks/user.mjs (7.67 kB) (2.12 kB gzip)
  ├─ dist/_worker.js/_chunks/user2.mjs (586 B) (326 B gzip)
  ├─ dist/_worker.js/_chunks/utils.mjs (3.04 kB) (1.24 kB gzip)
  ├─ dist/_worker.js/_chunks/validation.mjs (1.4 kB) (562 B gzip)
  ├─ dist/_worker.js/_libs/arctic.mjs (19.1 kB) (3.33 kB gzip)
  ├─ dist/_worker.js/_libs/cssfilter.mjs (19 kB) (3.85 kB gzip)
  ├─ dist/_worker.js/_libs/db0.mjs (5.17 kB) (1.73 kB gzip)
  ├─ dist/_worker.js/_libs/h3+rou3+srvx.mjs (26.3 kB) (7.44 kB gzip)
  ├─ dist/_worker.js/_libs/hookable.mjs (1.13 kB) (507 B gzip)
  ├─ dist/_worker.js/_libs/jose.mjs (38.8 kB) (8.95 kB gzip)
  ├─ dist/_worker.js/_libs/ms.mjs (2.99 kB) (1.1 kB gzip)
  ├─ dist/_worker.js/_libs/nodemailer.mjs (362 kB) (81.6 kB gzip)
  ├─ dist/_worker.js/_libs/oslojs__binary.mjs (3.89 kB) (684 B gzip)
  ├─ dist/_worker.js/_libs/oslojs__crypto.mjs (4.02 kB) (1.53 kB gzip)
  ├─ dist/_worker.js/_libs/oslojs__encoding.mjs (6.77 kB) (1.38 kB gzip)
  ├─ dist/_worker.js/_libs/oslojs__jwt.mjs (1.5 kB) (516 B gzip)
  ├─ dist/_worker.js/_libs/semver.mjs (50.5 kB) (10.1 kB gzip)
  ├─ dist/_worker.js/_libs/sentry__core+unenv.mjs (177 kB) (46.9 kB gzip)
  ├─ dist/_worker.js/_libs/smob.mjs (6.44 kB) (1.81 kB gzip)
  ├─ dist/_worker.js/_libs/unstorage.mjs (21.7 kB) (5.39 kB gzip)
  ├─ dist/_worker.js/_libs/xss.mjs (22.6 kB) (5.64 kB gzip)
  ├─ dist/_worker.js/_routes/admin/prune.mjs (669 B) (347 B gzip)
  ├─ dist/_worker.js/_routes/admin/reset.mjs (1.26 kB) (496 B gzip)
  ├─ dist/_worker.js/_routes/auth/logout.mjs (824 B) (427 B gzip)
  ├─ dist/_worker.js/_routes/auth/provider/[provider]/callback.mjs (587 B) (309 B gzip)
  ├─ dist/_worker.js/_routes/auth/provider/[provider]/callback2.mjs (1.09 kB) (498 B gzip)
  ├─ dist/_worker.js/_routes/auth/provider/[provider]/cancel.mjs (995 B) (495 B gzip)
  ├─ dist/_worker.js/_routes/auth/provider/[provider]/link.mjs (603 B) (313 B gzip)
  ├─ dist/_worker.js/_routes/auth/provider/[provider]/login.mjs (690 B) (344 B gzip)
  ├─ dist/_worker.js/_routes/auth/provider/[provider]/redirect.mjs (587 B) (304 B gzip)
  ├─ dist/_worker.js/_routes/auth/provider/[provider]/unlink.mjs (611 B) (314 B gzip)
  ├─ dist/_worker.js/_routes/auth/refresh.mjs (1.04 kB) (490 B gzip)
  ├─ dist/_worker.js/_routes/index.mjs (303 B) (213 B gzip)
  ├─ dist/_worker.js/_routes/totps.mjs (569 B) (323 B gzip)
  ├─ dist/_worker.js/_routes/totps/[uuid].mjs (841 B) (419 B gzip)
  ├─ dist/_worker.js/_routes/totps/[uuid]2.mjs (897 B) (456 B gzip)
  ├─ dist/_worker.js/_routes/totps/sync/pull.mjs (1.42 kB) (629 B gzip)
  ├─ dist/_worker.js/_routes/totps/sync/push.mjs (5.47 kB) (1.49 kB gzip)
  ├─ dist/_worker.js/_routes/totps2.mjs (582 B) (327 B gzip)
  ├─ dist/_worker.js/_routes/totps3.mjs (1 kB) (492 B gzip)
  ├─ dist/_worker.js/_routes/user.mjs (588 B) (328 B gzip)
  ├─ dist/_worker.js/_routes/user2.mjs (513 B) (297 B gzip)
  ├─ dist/_worker.js/_routes/webhooks/revenuecat.mjs (4.42 kB) (1.36 kB gzip)
  ├─ dist/_worker.js/_runtime.mjs (1.65 kB) (796 B gzip)
  ├─ dist/_worker.js/_tasks/prune.mjs (549 B) (296 B gzip)
  └─ dist/_worker.js/index.js (20.1 kB) (5.37 kB gzip)
Σ Total size: 876 kB (217 kB gzip)

 WARN  [cloudflare] Wrangler config pages_build_output_dir is overridden and will be ignored.                                                                        nitro 21:26:54

ℹ Generated dist/_worker.js/wrangler.json                                                                                                                                 21:26:54
ℹ Generated .wrangler/deploy/config.json                                                                                                                                  21:26:54
ℹ Generated dist/_routes.json                                                                                                                                             21:26:54
ℹ Generated dist/_headers                                                                                                                                                 21:26:54
ℹ Generated dist/_redirects                                                                                                                                               21:26:54
✔ You can preview this build using npx nitro preview                                                                                                                nitro 21:26:54
✔ You can deploy this build using npx nitro deploy --prebuilt                                                                                                       nitro 21:26:54

 ⛅️ wrangler 4.76.0
───────────────────
Using redirected Wrangler configuration.
 - Configuration being used: "dist/_worker.js/wrangler.json"
 - Original user's configuration: "wrangler.json"
 - Deploy configuration file: ".wrangler/deploy/config.json"
Attaching additional modules:
┌────────────────────────────────────────────────┬──────┬────────────┐
│ Name                                           │ Type │ Size       │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/auth.mjs                               │ esm  │ 21.96 KiB  │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/headers.mjs                            │ esm  │ 1.76 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/nitro.mjs                              │ esm  │ 1.14 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/package.mjs                            │ esm  │ 0.13 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/ratelimit.mjs                          │ esm  │ 9.06 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/session.mjs                            │ esm  │ 5.96 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/storage.mjs                            │ esm  │ 4.35 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/task.mjs                               │ esm  │ 1.52 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/user.mjs                               │ esm  │ 7.49 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/user2.mjs                              │ esm  │ 0.57 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/utils.mjs                              │ esm  │ 2.97 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _chunks/validation.mjs                         │ esm  │ 1.36 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/arctic.mjs                               │ esm  │ 18.64 KiB  │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/cssfilter.mjs                            │ esm  │ 18.52 KiB  │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/db0.mjs                                  │ esm  │ 5.05 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/h3+rou3+srvx.mjs                         │ esm  │ 25.69 KiB  │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/hookable.mjs                             │ esm  │ 1.10 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/jose.mjs                                 │ esm  │ 37.88 KiB  │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/ms.mjs                                   │ esm  │ 2.92 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/nodemailer.mjs                           │ esm  │ 353.63 KiB │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/oslojs__binary.mjs                       │ esm  │ 3.80 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/oslojs__crypto.mjs                       │ esm  │ 3.93 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/oslojs__encoding.mjs                     │ esm  │ 6.61 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/oslojs__jwt.mjs                          │ esm  │ 1.46 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/semver.mjs                               │ esm  │ 49.28 KiB  │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/sentry__core+unenv.mjs                   │ esm  │ 172.38 KiB │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/smob.mjs                                 │ esm  │ 6.29 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/unstorage.mjs                            │ esm  │ 21.24 KiB  │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _libs/xss.mjs                                  │ esm  │ 22.04 KiB  │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/admin/prune.mjs                        │ esm  │ 0.65 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/admin/reset.mjs                        │ esm  │ 1.23 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/auth/logout.mjs                        │ esm  │ 0.80 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/auth/provider/[provider]/callback.mjs  │ esm  │ 0.57 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/auth/provider/[provider]/callback2.mjs │ esm  │ 1.07 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/auth/provider/[provider]/cancel.mjs    │ esm  │ 0.97 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/auth/provider/[provider]/link.mjs      │ esm  │ 0.59 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/auth/provider/[provider]/login.mjs     │ esm  │ 0.67 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/auth/provider/[provider]/redirect.mjs  │ esm  │ 0.57 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/auth/provider/[provider]/unlink.mjs    │ esm  │ 0.60 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/auth/refresh.mjs                       │ esm  │ 1.02 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/index.mjs                              │ esm  │ 0.30 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/totps/[uuid].mjs                       │ esm  │ 0.82 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/totps/[uuid]2.mjs                      │ esm  │ 0.88 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/totps/sync/pull.mjs                    │ esm  │ 1.38 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/totps/sync/push.mjs                    │ esm  │ 5.35 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/totps.mjs                              │ esm  │ 0.56 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/totps2.mjs                             │ esm  │ 0.57 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/totps3.mjs                             │ esm  │ 0.98 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/user.mjs                               │ esm  │ 0.57 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/user2.mjs                              │ esm  │ 0.50 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _routes/webhooks/revenuecat.mjs                │ esm  │ 4.31 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _runtime.mjs                                   │ esm  │ 1.61 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ _tasks/prune.mjs                               │ esm  │ 0.54 KiB   │
├────────────────────────────────────────────────┼──────┼────────────┤
│ Total (53 modules)                             │      │ 835.84 KiB │
└────────────────────────────────────────────────┴──────┴────────────┘
✨ Compiled Worker successfully
✨ Parsed 0 valid redirect rules.
✨ Parsed 0 valid header rules.
Using redirected Wrangler configuration.
 - Configuration being used: "dist/_worker.js/wrangler.json"
 - Original user's configuration: "wrangler.json"
 - Deploy configuration file: ".wrangler/deploy/config.json"
Using secrets defined in .env
Your Worker has access to the following bindings:
Binding                                                                                Resource                     Mode
env.STORAGE (HIDDEN)                                         KV Namespace                 local
env.DATABASE (HIDDEN)                                               D1 Database                  local
env.BUCKET (HIDDEN)                                                         R2 Bucket                    local
env.CF_VERSION_METADATA                                                                Worker Version Metadata      local
env.CF_PAGES ("1")                                                                     Environment Variable         local
env.CF_PAGES_BRANCH ("dev")                                                            Environment Variable         local
env.CF_PAGES_COMMIT_SHA ("dfc1ff2a58eb315c6132a4ff4b867713e213c...")                   Environment Variable         local
env.CF_PAGES_URL ("https://dfc1ff2.openauthenticator-bac...")                          Environment Variable         local
env.NODE_ENV ("(hidden)")                                                              Environment Variable         local
env.URL ("(hidden)")                                                                   Environment Variable         local
env.GOOGLE_CLIENT_ID ("(hidden)")                                                      Environment Variable         local
env.GITHUB_CLIENT_ID ("(hidden)")                                                      Environment Variable         local
env.MICROSOFT_CLIENT_ID ("(hidden)")                                                   Environment Variable         local
env.MICROSOFT_TENANT_ID ("(hidden)")                                                   Environment Variable         local
env.APPLE_CLIENT_ID ("(hidden)")                                                       Environment Variable         local
env.APPLE_KEY_ID ("(hidden)")                                                          Environment Variable         local
env.APPLE_TEAM_ID ("(hidden)")                                                         Environment Variable         local
env.SENTRY_DSN ("(hidden)")                                                            Environment Variable         local
env.EMAIL_HOST ("(hidden)")                                                            Environment Variable         local
env.EMAIL_USERNAME ("(hidden)")                                                        Environment Variable         local
env.REVENUE_CAT_AUTHORIZATION_HEADER ("(hidden)")                                      Environment Variable         local
env.JWT_ACCESS_SECRET ("(hidden)")                                                     Environment Variable         local
env.JWT_REFRESH_SECRET ("(hidden)")                                                    Environment Variable         local
env.JWT_REFRESH_PEPPER ("(hidden)")                                                    Environment Variable         local
env.GOOGLE_CLIENT_SECRET ("(hidden)")                                                  Environment Variable         local
env.APPLE_PEM_CERTIFICATE ("(hidden)")                                                 Environment Variable         local
env.GITHUB_CLIENT_SECRET ("(hidden)")                                                  Environment Variable         local
env.MICROSOFT_CLIENT_SECRET ("(hidden)")                                               Environment Variable         local
env.EMAIL_PASSWORD ("(hidden)")                                                        Environment Variable         local

╭──────────────────────────────────────────────────────────────────────╮
│  [b] open a browser [d] open devtools [c] clear console [x] to exit  │
╰──────────────────────────────────────────────────────────────────────╯
⎔ Starting local server...
[wrangler:info] Ready on http://localhost:8788
✘ [ERROR] Error: [db0] [d1] binding `DATABASE` not found

      at getDB
  (file:///var/mnt/data/Projets/WebStorm/OpenAuthenticatorCloudflareBackend/.wrangler/tmp/pages-0ohCHB/_libs/db0.mjs:139:23)
      ... 5 lines matching cause stack trace ...
      at async drainBody
  (file:///home/hugo/.npm/_npx/32026684e21afda6/node_modules/wrangler/templates/middleware/middleware-ensure-req-body-drained.ts:5:10)
  {
    cause: Error: [db0] [d1] binding `DATABASE` not found
        at getDB
  (file:///var/mnt/data/Projets/WebStorm/OpenAuthenticatorCloudflareBackend/.wrangler/tmp/pages-0ohCHB/_libs/db0.mjs:139:23)
        at Object.prepare
  (file:///var/mnt/data/Projets/WebStorm/OpenAuthenticatorCloudflareBackend/.wrangler/tmp/pages-0ohCHB/_libs/db0.mjs:147:42)
        at Object.prepare
  (file:///var/mnt/data/Projets/WebStorm/OpenAuthenticatorCloudflareBackend/.wrangler/tmp/pages-0ohCHB/_libs/db0.mjs:58:21)
        at null.<anonymous>
  (file:///var/mnt/data/Projets/WebStorm/OpenAuthenticatorCloudflareBackend/.wrangler/tmp/pages-0ohCHB/_routes/admin/reset.mjs:6:11)
        at null.<anonymous>
  (file:///var/mnt/data/Projets/WebStorm/OpenAuthenticatorCloudflareBackend/.wrangler/tmp/pages-0ohCHB/_libs/h3+rou3+srvx.mjs:512:19)
        at async jsonError
  (file:///home/hugo/.npm/_npx/32026684e21afda6/node_modules/wrangler/templates/middleware/middleware-miniflare3-json-error.ts:22:10)
        at async drainBody
  (file:///home/hugo/.npm/_npx/32026684e21afda6/node_modules/wrangler/templates/middleware/middleware-ensure-req-body-drained.ts:5:10),
    status: 500,
    statusText: undefined,
    headers: undefined,
    data: undefined,
    body: undefined,
    unhandled: true
  }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions