[{"data":1,"prerenderedAt":1380},["ShallowReactive",2],{"navigation":3,"-guide-storage":225,"-guide-storage-surround":1375},[4,76,219],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Docs","/guide","1.guide/0.index",[9,11,16,21,26,31,36,41,46,51,56,61,66,71],{"title":5,"path":6,"stem":7,"icon":10},"ph:book-open-duotone",{"title":12,"path":13,"stem":14,"icon":15},"Server Utils","/guide/utils","1.guide/1.utils","ri:tools-line",{"title":17,"path":18,"stem":19,"icon":20},"Tasks","/guide/tasks","1.guide/10.tasks","codicon:run-all",{"title":22,"path":23,"stem":24,"icon":25},"Server Routes","/guide/routing","1.guide/2.routing","ri:direction-line",{"title":27,"path":28,"stem":29,"icon":30},"WebSocket","/guide/websocket","1.guide/3.websocket","cib:socket-io",{"title":32,"path":33,"stem":34,"icon":35},"KV Storage","/guide/storage","1.guide/4.storage","carbon:datastore",{"title":37,"path":38,"stem":39,"icon":40},"SQL Database","/guide/database","1.guide/5.database","ri:database-2-line",{"title":42,"path":43,"stem":44,"icon":45},"Cache","/guide/cache","1.guide/6.cache","ri:speed-line",{"title":47,"path":48,"stem":49,"icon":50},"Fetch","/guide/fetch","1.guide/7.fetch","ri:global-line",{"title":52,"path":53,"stem":54,"icon":55},"Assets","/guide/assets","1.guide/8.assets","ri:image-2-line",{"title":57,"path":58,"stem":59,"icon":60},"Plugins","/guide/plugins","1.guide/9.plugins","ri:plug-line",{"title":62,"path":63,"stem":64,"icon":65},"Configuration","/guide/configuration","1.guide/97.configuration","ri:settings-3-line",{"title":67,"path":68,"stem":69,"icon":70},"TypeScript","/guide/typescript","1.guide/98.typescript","tabler:brand-typescript",{"title":72,"path":73,"stem":74,"icon":75},"Nightly Channel","/guide/nightly","1.guide/99.nightly","ri:moon-fill",{"title":77,"path":78,"stem":79,"children":80,"icon":82},"Deploy","/deploy","2.deploy/0.index",[81,83,87,113,118],{"title":77,"path":78,"stem":79,"icon":82},"ri:upload-cloud-2-line",{"title":84,"path":85,"stem":86,"icon":50},"Edge Workers","/deploy/workers","2.deploy/1.workers",{"title":88,"path":89,"stem":90,"children":91,"page":112},"Runtimes","/deploy/runtimes","2.deploy/10.runtimes",[92,97,102,107],{"title":93,"path":94,"stem":95,"icon":96},"Node.js","/deploy/runtimes/node","2.deploy/10.runtimes/1.node","akar-icons:node-fill",{"title":98,"path":99,"stem":100,"icon":101},"WinterJS","/deploy/runtimes/_winterjs","2.deploy/10.runtimes/_winterjs","game-icons:cold-heart",{"title":103,"path":104,"stem":105,"icon":106},"Bun","/deploy/runtimes/bun","2.deploy/10.runtimes/bun","simple-icons:bun",{"title":108,"path":109,"stem":110,"icon":111},"Deno","/deploy/runtimes/deno","2.deploy/10.runtimes/deno","simple-icons:deno",false,{"title":114,"path":115,"stem":116,"icon":117},"Custom Preset","/deploy/custom-presets","2.deploy/2.custom-presets","ri:file-code-line",{"title":119,"path":120,"stem":121,"children":122,"page":112},"Providers","/deploy/providers","2.deploy/20.providers",[123,127,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215],{"title":124,"path":125,"stem":126},"Alwaysdata","/deploy/providers/alwaysdata","2.deploy/20.providers/alwaysdata",{"title":128,"path":129,"stem":130},"AWS Lambda","/deploy/providers/aws","2.deploy/20.providers/aws",{"title":132,"path":133,"stem":134},"AWS Amplify","/deploy/providers/aws-amplify","2.deploy/20.providers/aws-amplify",{"title":136,"path":137,"stem":138},"Azure","/deploy/providers/azure","2.deploy/20.providers/azure",{"title":140,"path":141,"stem":142},"Cleavr","/deploy/providers/cleavr","2.deploy/20.providers/cleavr",{"title":144,"path":145,"stem":146},"Cloudflare","/deploy/providers/cloudflare","2.deploy/20.providers/cloudflare",{"title":148,"path":149,"stem":150},"Deno Deploy","/deploy/providers/deno-deploy","2.deploy/20.providers/deno-deploy",{"title":152,"path":153,"stem":154},"DigitalOcean","/deploy/providers/digitalocean","2.deploy/20.providers/digitalocean",{"title":156,"path":157,"stem":158},"Edgio","/deploy/providers/edgio","2.deploy/20.providers/edgio",{"title":160,"path":161,"stem":162},"Firebase","/deploy/providers/firebase","2.deploy/20.providers/firebase",{"title":164,"path":165,"stem":166},"Flightcontrol","/deploy/providers/flightcontrol","2.deploy/20.providers/flightcontrol",{"title":168,"path":169,"stem":170},"Genezio","/deploy/providers/genezio","2.deploy/20.providers/genezio",{"title":172,"path":173,"stem":174},"GitHub Pages","/deploy/providers/github-pages","2.deploy/20.providers/github-pages",{"title":176,"path":177,"stem":178},"GitLab Pages","/deploy/providers/gitlab-pages","2.deploy/20.providers/gitlab-pages",{"title":180,"path":181,"stem":182},"Heroku","/deploy/providers/heroku","2.deploy/20.providers/heroku",{"title":184,"path":185,"stem":186},"IIS","/deploy/providers/iis","2.deploy/20.providers/iis",{"title":188,"path":189,"stem":190},"Koyeb","/deploy/providers/koyeb","2.deploy/20.providers/koyeb",{"title":192,"path":193,"stem":194},"Netlify","/deploy/providers/netlify","2.deploy/20.providers/netlify",{"title":196,"path":197,"stem":198},"Platform.sh","/deploy/providers/platform-sh","2.deploy/20.providers/platform-sh",{"title":200,"path":201,"stem":202},"Render.com","/deploy/providers/render","2.deploy/20.providers/render",{"title":204,"path":205,"stem":206},"StormKit","/deploy/providers/stormkit","2.deploy/20.providers/stormkit",{"title":208,"path":209,"stem":210},"Vercel","/deploy/providers/vercel","2.deploy/20.providers/vercel",{"title":212,"path":213,"stem":214},"Zeabur","/deploy/providers/zeabur","2.deploy/20.providers/zeabur",{"title":216,"path":217,"stem":218},"Zerops","/deploy/providers/zerops","2.deploy/20.providers/zerops",{"title":220,"path":221,"stem":222,"children":223,"icon":65},"Config","/config","3.config/0.index",[224],{"title":220,"path":221,"stem":222,"icon":65},{"id":226,"title":32,"body":227,"description":1369,"extension":1370,"meta":1371,"navigation":1372,"path":33,"seo":1373,"stem":34,"__hash__":1374},"content/1.guide/4.storage.md",{"type":228,"value":229,"toc":1362,"icon":35},"minimark",[230,242,247,263,525,528,531,538,718,729,734,741,1010,1021,1025,1028,1139,1149,1162,1351,1358],[231,232,233,234,241],"p",{},"Nitro has built-in integration with ",[235,236,240],"a",{"href":237,"rel":238},"https://unstorage.unjs.io",[239],"nofollow","unstorage"," to provide a runtime agnostic persistent layer.",[243,244,246],"h2",{"id":245},"usage","Usage",[231,248,249,250,254,255,258,259,262],{},"To use the storage layer, you can use the ",[251,252,253],"code",{},"useStorage()"," and call ",[251,256,257],{},"getItem(key)"," to retrieve an item and ",[251,260,261],{},"setItem(key, value)"," to set an item.",[264,265,270],"pre",{"className":266,"code":267,"language":268,"meta":269,"style":269},"language-ts shiki shiki-themes github-light github-dark github-dark","// Default storage is in memory\nawait useStorage().setItem('test:foo', { hello: 'world' })\nawait useStorage().getItem('test:foo')\n\n// You can also specify the base in useStorage(base)\nawait useStorage('test').setItem('foo', { hello: 'world' })\n\n// You can use data storage to write data to default .data/kv directory\nconst dataStorage = useStorage('data')\nawait dataStorage.setItem('test', 'works')\nawait dataStorage.getItem('data:test') // Value persists\n\n// You can use generics to define types\nawait useStorage\u003C{ hello: string }>('test').getItem('foo')\nawait useStorage('test').getItem\u003C{ hello: string }>('foo')\n","ts","",[251,271,272,281,315,334,341,347,375,380,386,408,430,450,455,461,496],{"__ignoreMap":269},[273,274,277],"span",{"class":275,"line":276},"line",1,[273,278,280],{"class":279},"sCsY4","// Default storage is in memory\n",[273,282,284,288,292,296,299,302,306,309,312],{"class":275,"line":283},2,[273,285,287],{"class":286},"so5gQ","await",[273,289,291],{"class":290},"shcOC"," useStorage",[273,293,295],{"class":294},"slsVL","().",[273,297,298],{"class":290},"setItem",[273,300,301],{"class":294},"(",[273,303,305],{"class":304},"sfrk1","'test:foo'",[273,307,308],{"class":294},", { hello: ",[273,310,311],{"class":304},"'world'",[273,313,314],{"class":294}," })\n",[273,316,318,320,322,324,327,329,331],{"class":275,"line":317},3,[273,319,287],{"class":286},[273,321,291],{"class":290},[273,323,295],{"class":294},[273,325,326],{"class":290},"getItem",[273,328,301],{"class":294},[273,330,305],{"class":304},[273,332,333],{"class":294},")\n",[273,335,337],{"class":275,"line":336},4,[273,338,340],{"emptyLinePlaceholder":339},true,"\n",[273,342,344],{"class":275,"line":343},5,[273,345,346],{"class":279},"// You can also specify the base in useStorage(base)\n",[273,348,350,352,354,356,359,362,364,366,369,371,373],{"class":275,"line":349},6,[273,351,287],{"class":286},[273,353,291],{"class":290},[273,355,301],{"class":294},[273,357,358],{"class":304},"'test'",[273,360,361],{"class":294},").",[273,363,298],{"class":290},[273,365,301],{"class":294},[273,367,368],{"class":304},"'foo'",[273,370,308],{"class":294},[273,372,311],{"class":304},[273,374,314],{"class":294},[273,376,378],{"class":275,"line":377},7,[273,379,340],{"emptyLinePlaceholder":339},[273,381,383],{"class":275,"line":382},8,[273,384,385],{"class":279},"// You can use data storage to write data to default .data/kv directory\n",[273,387,389,392,396,399,401,403,406],{"class":275,"line":388},9,[273,390,391],{"class":286},"const",[273,393,395],{"class":394},"suiK_"," dataStorage",[273,397,398],{"class":286}," =",[273,400,291],{"class":290},[273,402,301],{"class":294},[273,404,405],{"class":304},"'data'",[273,407,333],{"class":294},[273,409,411,413,416,418,420,422,425,428],{"class":275,"line":410},10,[273,412,287],{"class":286},[273,414,415],{"class":294}," dataStorage.",[273,417,298],{"class":290},[273,419,301],{"class":294},[273,421,358],{"class":304},[273,423,424],{"class":294},", ",[273,426,427],{"class":304},"'works'",[273,429,333],{"class":294},[273,431,433,435,437,439,441,444,447],{"class":275,"line":432},11,[273,434,287],{"class":286},[273,436,415],{"class":294},[273,438,326],{"class":290},[273,440,301],{"class":294},[273,442,443],{"class":304},"'data:test'",[273,445,446],{"class":294},") ",[273,448,449],{"class":279},"// Value persists\n",[273,451,453],{"class":275,"line":452},12,[273,454,340],{"emptyLinePlaceholder":339},[273,456,458],{"class":275,"line":457},13,[273,459,460],{"class":279},"// You can use generics to define types\n",[273,462,464,466,468,471,475,478,481,484,486,488,490,492,494],{"class":275,"line":463},14,[273,465,287],{"class":286},[273,467,291],{"class":290},[273,469,470],{"class":294},"\u003C{ ",[273,472,474],{"class":473},"sQHwn","hello",[273,476,477],{"class":286},":",[273,479,480],{"class":394}," string",[273,482,483],{"class":294}," }>(",[273,485,358],{"class":304},[273,487,361],{"class":294},[273,489,326],{"class":290},[273,491,301],{"class":294},[273,493,368],{"class":304},[273,495,333],{"class":294},[273,497,499,501,503,505,507,509,511,513,515,517,519,521,523],{"class":275,"line":498},15,[273,500,287],{"class":286},[273,502,291],{"class":290},[273,504,301],{"class":294},[273,506,358],{"class":304},[273,508,361],{"class":294},[273,510,326],{"class":290},[273,512,470],{"class":294},[273,514,474],{"class":473},[273,516,477],{"class":286},[273,518,480],{"class":394},[273,520,483],{"class":294},[273,522,368],{"class":304},[273,524,333],{"class":294},[526,527],"read-more",{"to":237},[243,529,62],{"id":530},"configuration",[231,532,533,534,537],{},"You can mount one or multiple custom storage drivers using the ",[251,535,536],{},"storage"," config.\nThe key is the mount point name, and the value is the driver name and configuration.",[539,540,541,629],"code-group",{},[264,542,545],{"className":266,"code":543,"filename":544,"language":268,"meta":269,"style":269},"export default defineNitroConfig({\n  storage: {\n    redis: {\n      driver: 'redis',\n      /* redis connector options */\n    },\n    db: {\n      driver: 'fs',\n      base: './data/db'\n    }\n  }\n})\n","nitro.config.ts",[251,546,547,561,566,571,582,587,592,597,606,614,619,624],{"__ignoreMap":269},[273,548,549,552,555,558],{"class":275,"line":276},[273,550,551],{"class":286},"export",[273,553,554],{"class":286}," default",[273,556,557],{"class":290}," defineNitroConfig",[273,559,560],{"class":294},"({\n",[273,562,563],{"class":275,"line":283},[273,564,565],{"class":294},"  storage: {\n",[273,567,568],{"class":275,"line":317},[273,569,570],{"class":294},"    redis: {\n",[273,572,573,576,579],{"class":275,"line":336},[273,574,575],{"class":294},"      driver: ",[273,577,578],{"class":304},"'redis'",[273,580,581],{"class":294},",\n",[273,583,584],{"class":275,"line":343},[273,585,586],{"class":279},"      /* redis connector options */\n",[273,588,589],{"class":275,"line":349},[273,590,591],{"class":294},"    },\n",[273,593,594],{"class":275,"line":377},[273,595,596],{"class":294},"    db: {\n",[273,598,599,601,604],{"class":275,"line":382},[273,600,575],{"class":294},[273,602,603],{"class":304},"'fs'",[273,605,581],{"class":294},[273,607,608,611],{"class":275,"line":388},[273,609,610],{"class":294},"      base: ",[273,612,613],{"class":304},"'./data/db'\n",[273,615,616],{"class":275,"line":410},[273,617,618],{"class":294},"    }\n",[273,620,621],{"class":275,"line":432},[273,622,623],{"class":294},"  }\n",[273,625,626],{"class":275,"line":452},[273,627,628],{"class":294},"})\n",[264,630,633],{"className":266,"code":631,"filename":632,"language":268,"meta":269,"style":269},"export default defineNuxtConfig({\n  nitro: {\n    storage: {\n      redis: {\n        driver: 'redis',\n        /* redis connector options */\n      },\n      db: {\n        driver: 'fs',\n        base: './.data/db'\n      }\n    }\n  }\n})\n","nuxt.config.ts",[251,634,635,646,651,656,661,670,675,680,685,693,701,706,710,714],{"__ignoreMap":269},[273,636,637,639,641,644],{"class":275,"line":276},[273,638,551],{"class":286},[273,640,554],{"class":286},[273,642,643],{"class":290}," defineNuxtConfig",[273,645,560],{"class":294},[273,647,648],{"class":275,"line":283},[273,649,650],{"class":294},"  nitro: {\n",[273,652,653],{"class":275,"line":317},[273,654,655],{"class":294},"    storage: {\n",[273,657,658],{"class":275,"line":336},[273,659,660],{"class":294},"      redis: {\n",[273,662,663,666,668],{"class":275,"line":343},[273,664,665],{"class":294},"        driver: ",[273,667,578],{"class":304},[273,669,581],{"class":294},[273,671,672],{"class":275,"line":349},[273,673,674],{"class":279},"        /* redis connector options */\n",[273,676,677],{"class":275,"line":377},[273,678,679],{"class":294},"      },\n",[273,681,682],{"class":275,"line":382},[273,683,684],{"class":294},"      db: {\n",[273,686,687,689,691],{"class":275,"line":388},[273,688,665],{"class":294},[273,690,603],{"class":304},[273,692,581],{"class":294},[273,694,695,698],{"class":275,"line":410},[273,696,697],{"class":294},"        base: ",[273,699,700],{"class":304},"'./.data/db'\n",[273,702,703],{"class":275,"line":432},[273,704,705],{"class":294},"      }\n",[273,707,708],{"class":275,"line":452},[273,709,618],{"class":294},[273,711,712],{"class":275,"line":457},[273,713,623],{"class":294},[273,715,716],{"class":275,"line":463},[273,717,628],{"class":294},[526,719,721],{"to":720},"https://unstorage.unjs.io/",[231,722,723,724,728],{},"You can find the driver list on ",[235,725,727],{"href":720,"rel":726},[239],"unstorage documentation"," with their configuration.",[730,731,733],"h3",{"id":732},"runtime-configuration","Runtime configuration",[231,735,736,737,740],{},"In scenarios where the mount point configuration is not known until runtime, Nitro can dynamically add mount points during startup using ",[235,738,739],{"href":58},"plugins",".",[539,742,743,891,953],{},[264,744,747],{"className":266,"code":745,"filename":746,"language":268,"meta":269,"style":269},"import redisDriver from 'unstorage/drivers/redis'\n\nexport default defineNitroPlugin(() => {\n  const storage = useStorage()\n\n  // Dynamically pass in credentials from runtime configuration, or other sources\n  const driver = redisDriver({\n      base: 'redis',\n      host: useRuntimeConfig().redis.host,\n      port: useRuntimeConfig().redis.port,\n      /* other redis connector options */\n    })\n\n  // Mount driver\n  storage.mount('redis', driver)\n})\n","server/plugins/storage.ts",[251,748,749,763,767,785,800,804,809,823,831,842,852,857,862,866,871,886],{"__ignoreMap":269},[273,750,751,754,757,760],{"class":275,"line":276},[273,752,753],{"class":286},"import",[273,755,756],{"class":294}," redisDriver ",[273,758,759],{"class":286},"from",[273,761,762],{"class":304}," 'unstorage/drivers/redis'\n",[273,764,765],{"class":275,"line":283},[273,766,340],{"emptyLinePlaceholder":339},[273,768,769,771,773,776,779,782],{"class":275,"line":317},[273,770,551],{"class":286},[273,772,554],{"class":286},[273,774,775],{"class":290}," defineNitroPlugin",[273,777,778],{"class":294},"(() ",[273,780,781],{"class":286},"=>",[273,783,784],{"class":294}," {\n",[273,786,787,790,793,795,797],{"class":275,"line":336},[273,788,789],{"class":286},"  const",[273,791,792],{"class":394}," storage",[273,794,398],{"class":286},[273,796,291],{"class":290},[273,798,799],{"class":294},"()\n",[273,801,802],{"class":275,"line":343},[273,803,340],{"emptyLinePlaceholder":339},[273,805,806],{"class":275,"line":349},[273,807,808],{"class":279},"  // Dynamically pass in credentials from runtime configuration, or other sources\n",[273,810,811,813,816,818,821],{"class":275,"line":377},[273,812,789],{"class":286},[273,814,815],{"class":394}," driver",[273,817,398],{"class":286},[273,819,820],{"class":290}," redisDriver",[273,822,560],{"class":294},[273,824,825,827,829],{"class":275,"line":382},[273,826,610],{"class":294},[273,828,578],{"class":304},[273,830,581],{"class":294},[273,832,833,836,839],{"class":275,"line":388},[273,834,835],{"class":294},"      host: ",[273,837,838],{"class":290},"useRuntimeConfig",[273,840,841],{"class":294},"().redis.host,\n",[273,843,844,847,849],{"class":275,"line":410},[273,845,846],{"class":294},"      port: ",[273,848,838],{"class":290},[273,850,851],{"class":294},"().redis.port,\n",[273,853,854],{"class":275,"line":432},[273,855,856],{"class":279},"      /* other redis connector options */\n",[273,858,859],{"class":275,"line":452},[273,860,861],{"class":294},"    })\n",[273,863,864],{"class":275,"line":457},[273,865,340],{"emptyLinePlaceholder":339},[273,867,868],{"class":275,"line":463},[273,869,870],{"class":279},"  // Mount driver\n",[273,872,873,876,879,881,883],{"class":275,"line":498},[273,874,875],{"class":294},"  storage.",[273,877,878],{"class":290},"mount",[273,880,301],{"class":294},[273,882,578],{"class":304},[273,884,885],{"class":294},", driver)\n",[273,887,889],{"class":275,"line":888},16,[273,890,628],{"class":294},[264,892,894],{"className":266,"code":893,"filename":544,"language":268,"meta":269,"style":269},"export default defineNitroConfig({\n  runtimeConfig: {\n    redis: { // Default values\n      host: '',\n      port: 0,\n      /* other redis connector options */\n    }\n  }\n})\n",[251,895,896,906,911,919,928,937,941,945,949],{"__ignoreMap":269},[273,897,898,900,902,904],{"class":275,"line":276},[273,899,551],{"class":286},[273,901,554],{"class":286},[273,903,557],{"class":290},[273,905,560],{"class":294},[273,907,908],{"class":275,"line":283},[273,909,910],{"class":294},"  runtimeConfig: {\n",[273,912,913,916],{"class":275,"line":317},[273,914,915],{"class":294},"    redis: { ",[273,917,918],{"class":279},"// Default values\n",[273,920,921,923,926],{"class":275,"line":336},[273,922,835],{"class":294},[273,924,925],{"class":304},"''",[273,927,581],{"class":294},[273,929,930,932,935],{"class":275,"line":343},[273,931,846],{"class":294},[273,933,934],{"class":394},"0",[273,936,581],{"class":294},[273,938,939],{"class":275,"line":349},[273,940,856],{"class":279},[273,942,943],{"class":275,"line":377},[273,944,618],{"class":294},[273,946,947],{"class":275,"line":382},[273,948,623],{"class":294},[273,950,951],{"class":275,"line":388},[273,952,628],{"class":294},[264,954,956],{"className":266,"code":955,"filename":632,"language":268,"meta":269,"style":269},"export default defineNuxtConfig({\n  runtimeConfig: {\n    redis: { // Default values\n      host: '',\n      port: 0,\n      /* other redis connector options */\n    }\n  }\n})\n",[251,957,958,968,972,978,986,994,998,1002,1006],{"__ignoreMap":269},[273,959,960,962,964,966],{"class":275,"line":276},[273,961,551],{"class":286},[273,963,554],{"class":286},[273,965,643],{"class":290},[273,967,560],{"class":294},[273,969,970],{"class":275,"line":283},[273,971,910],{"class":294},[273,973,974,976],{"class":275,"line":317},[273,975,915],{"class":294},[273,977,918],{"class":279},[273,979,980,982,984],{"class":275,"line":336},[273,981,835],{"class":294},[273,983,925],{"class":304},[273,985,581],{"class":294},[273,987,988,990,992],{"class":275,"line":343},[273,989,846],{"class":294},[273,991,934],{"class":394},[273,993,581],{"class":294},[273,995,996],{"class":275,"line":349},[273,997,856],{"class":279},[273,999,1000],{"class":275,"line":377},[273,1001,618],{"class":294},[273,1003,1004],{"class":275,"line":382},[273,1005,623],{"class":294},[273,1007,1008],{"class":275,"line":388},[273,1009,628],{"class":294},[1011,1012,1013],"warning",{},[231,1014,1015,1016,740],{},"This is a temporary workaround, with a better solution coming in the future! Keep a lookout on the GitHub issue ",[235,1017,1020],{"href":1018,"rel":1019},"https://github.com/nitrojs/nitro/issues/1161#issuecomment-1511444675",[239],"here",[730,1022,1024],{"id":1023},"development-only-mount-points","Development-only mount points",[231,1026,1027],{},"By default, Nitro will mount the project directory and some other dirs using the filesystem driver in development time.",[264,1029,1033],{"className":1030,"code":1031,"language":1032,"meta":269,"style":269},"language-js shiki shiki-themes github-light github-dark github-dark","// Access to project root dir\nconst rootStorage = useStorage('root')\n\n// Access to project src dir (same as root by default)\nconst srcStorage = useStorage('src')\n\n// Access to server cache dir\nconst cacheStorage = useStorage('cache')\n\n// Access to the temp build dir\nconst buildStorage = useStorage('build')\n","js",[251,1034,1035,1040,1058,1062,1067,1085,1089,1094,1112,1116,1121],{"__ignoreMap":269},[273,1036,1037],{"class":275,"line":276},[273,1038,1039],{"class":279},"// Access to project root dir\n",[273,1041,1042,1044,1047,1049,1051,1053,1056],{"class":275,"line":283},[273,1043,391],{"class":286},[273,1045,1046],{"class":394}," rootStorage",[273,1048,398],{"class":286},[273,1050,291],{"class":290},[273,1052,301],{"class":294},[273,1054,1055],{"class":304},"'root'",[273,1057,333],{"class":294},[273,1059,1060],{"class":275,"line":317},[273,1061,340],{"emptyLinePlaceholder":339},[273,1063,1064],{"class":275,"line":336},[273,1065,1066],{"class":279},"// Access to project src dir (same as root by default)\n",[273,1068,1069,1071,1074,1076,1078,1080,1083],{"class":275,"line":343},[273,1070,391],{"class":286},[273,1072,1073],{"class":394}," srcStorage",[273,1075,398],{"class":286},[273,1077,291],{"class":290},[273,1079,301],{"class":294},[273,1081,1082],{"class":304},"'src'",[273,1084,333],{"class":294},[273,1086,1087],{"class":275,"line":349},[273,1088,340],{"emptyLinePlaceholder":339},[273,1090,1091],{"class":275,"line":377},[273,1092,1093],{"class":279},"// Access to server cache dir\n",[273,1095,1096,1098,1101,1103,1105,1107,1110],{"class":275,"line":382},[273,1097,391],{"class":286},[273,1099,1100],{"class":394}," cacheStorage",[273,1102,398],{"class":286},[273,1104,291],{"class":290},[273,1106,301],{"class":294},[273,1108,1109],{"class":304},"'cache'",[273,1111,333],{"class":294},[273,1113,1114],{"class":275,"line":388},[273,1115,340],{"emptyLinePlaceholder":339},[273,1117,1118],{"class":275,"line":410},[273,1119,1120],{"class":279},"// Access to the temp build dir\n",[273,1122,1123,1125,1128,1130,1132,1134,1137],{"class":275,"line":432},[273,1124,391],{"class":286},[273,1126,1127],{"class":394}," buildStorage",[273,1129,398],{"class":286},[273,1131,291],{"class":290},[273,1133,301],{"class":294},[273,1135,1136],{"class":304},"'build'",[273,1138,333],{"class":294},[1140,1141,1142],"tip",{},[231,1143,1144,1145,1148],{},"\nYou also can use the ",[251,1146,1147],{},"devStorage"," key to overwrite the storage configuration during development. This is very useful when you use a database in production and want to use the filesystem in development.",[231,1150,1151,1152,1154,1155,1158,1159,1161],{},"In order to use the ",[251,1153,1147],{}," key, you need to use the ",[251,1156,1157],{},"nitro dev"," command and the key in the ",[251,1160,536],{}," option must be the same as the production one.",[539,1163,1164,1253],{},[264,1165,1167],{"className":266,"code":1166,"filename":544,"language":268,"meta":269,"style":269},"export default defineNitroConfig({\n  // Production\n  storage: {\n    db: {\n      driver: 'redis',\n      /* redis connector options */\n    }\n  },\n  // Development\n  devStorage: {\n    db: {\n      driver: 'fs',\n      base: './data/db'\n    }\n  }\n})\n",[251,1168,1169,1179,1184,1188,1192,1200,1204,1208,1213,1218,1223,1227,1235,1241,1245,1249],{"__ignoreMap":269},[273,1170,1171,1173,1175,1177],{"class":275,"line":276},[273,1172,551],{"class":286},[273,1174,554],{"class":286},[273,1176,557],{"class":290},[273,1178,560],{"class":294},[273,1180,1181],{"class":275,"line":283},[273,1182,1183],{"class":279},"  // Production\n",[273,1185,1186],{"class":275,"line":317},[273,1187,565],{"class":294},[273,1189,1190],{"class":275,"line":336},[273,1191,596],{"class":294},[273,1193,1194,1196,1198],{"class":275,"line":343},[273,1195,575],{"class":294},[273,1197,578],{"class":304},[273,1199,581],{"class":294},[273,1201,1202],{"class":275,"line":349},[273,1203,586],{"class":279},[273,1205,1206],{"class":275,"line":377},[273,1207,618],{"class":294},[273,1209,1210],{"class":275,"line":382},[273,1211,1212],{"class":294},"  },\n",[273,1214,1215],{"class":275,"line":388},[273,1216,1217],{"class":279},"  // Development\n",[273,1219,1220],{"class":275,"line":410},[273,1221,1222],{"class":294},"  devStorage: {\n",[273,1224,1225],{"class":275,"line":432},[273,1226,596],{"class":294},[273,1228,1229,1231,1233],{"class":275,"line":452},[273,1230,575],{"class":294},[273,1232,603],{"class":304},[273,1234,581],{"class":294},[273,1236,1237,1239],{"class":275,"line":457},[273,1238,610],{"class":294},[273,1240,613],{"class":304},[273,1242,1243],{"class":275,"line":463},[273,1244,618],{"class":294},[273,1246,1247],{"class":275,"line":498},[273,1248,623],{"class":294},[273,1250,1251],{"class":275,"line":888},[273,1252,628],{"class":294},[264,1254,1256],{"className":266,"code":1255,"filename":632,"language":268,"meta":269,"style":269},"export default defineNuxtConfig({\n  nitro: {\n    // Production\n    storage: {\n      db: {\n        driver: 'redis',\n        /* redis connector options */\n      }\n    },\n    // Development\n    devStorage: {\n      db: {\n        driver: 'fs',\n        base: './data/db'\n      }\n    }\n  }\n})\n",[251,1257,1258,1268,1272,1277,1281,1285,1293,1297,1301,1305,1310,1315,1319,1327,1333,1337,1341,1346],{"__ignoreMap":269},[273,1259,1260,1262,1264,1266],{"class":275,"line":276},[273,1261,551],{"class":286},[273,1263,554],{"class":286},[273,1265,643],{"class":290},[273,1267,560],{"class":294},[273,1269,1270],{"class":275,"line":283},[273,1271,650],{"class":294},[273,1273,1274],{"class":275,"line":317},[273,1275,1276],{"class":279},"    // Production\n",[273,1278,1279],{"class":275,"line":336},[273,1280,655],{"class":294},[273,1282,1283],{"class":275,"line":343},[273,1284,684],{"class":294},[273,1286,1287,1289,1291],{"class":275,"line":349},[273,1288,665],{"class":294},[273,1290,578],{"class":304},[273,1292,581],{"class":294},[273,1294,1295],{"class":275,"line":377},[273,1296,674],{"class":279},[273,1298,1299],{"class":275,"line":382},[273,1300,705],{"class":294},[273,1302,1303],{"class":275,"line":388},[273,1304,591],{"class":294},[273,1306,1307],{"class":275,"line":410},[273,1308,1309],{"class":279},"    // Development\n",[273,1311,1312],{"class":275,"line":432},[273,1313,1314],{"class":294},"    devStorage: {\n",[273,1316,1317],{"class":275,"line":452},[273,1318,684],{"class":294},[273,1320,1321,1323,1325],{"class":275,"line":457},[273,1322,665],{"class":294},[273,1324,603],{"class":304},[273,1326,581],{"class":294},[273,1328,1329,1331],{"class":275,"line":463},[273,1330,697],{"class":294},[273,1332,613],{"class":304},[273,1334,1335],{"class":275,"line":498},[273,1336,705],{"class":294},[273,1338,1339],{"class":275,"line":888},[273,1340,618],{"class":294},[273,1342,1344],{"class":275,"line":1343},17,[273,1345,623],{"class":294},[273,1347,1349],{"class":275,"line":1348},18,[273,1350,628],{"class":294},[231,1352,1353,1354,1357],{},"You will also be able to access to a ",[251,1355,1356],{},"build"," namespace in the storage layer only during development. It contains file generated by Nitro.",[1359,1360,1361],"style",{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":269,"searchDepth":283,"depth":283,"links":1363},[1364,1365],{"id":245,"depth":283,"text":246},{"id":530,"depth":283,"text":62,"children":1366},[1367,1368],{"id":732,"depth":317,"text":733},{"id":1023,"depth":317,"text":1024},"Nitro provides a built-in storage layer that can abstract filesystem or database or any other data source.","md",{"icon":35},{"icon":35},{"title":32,"description":1369},"mVWyaSVx5Vm5KQq1A6ubox4Bs1-3QoG7E6EYrqEuiHw",[1376,1378],{"title":27,"path":28,"stem":29,"description":1377,"icon":30,"children":-1},"Nitro natively supports a cross platform WebSocket API",{"title":37,"path":38,"stem":39,"description":1379,"icon":40,"children":-1},"Nitro provides a built-in and lightweight SQL database layer.",1775118356725]