Skip to content

Latest commit

 

History

History
 
 

examples

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Examples

CLI

// cli.js
const low = require('lowdb')
const db = low('db.json')

db.defaults({ posts: [] })
  .value()

const result = db.get('posts')
  .push({ name: process.argv[2] })
  .value()

console.log(result)
$ node cli.js hello
# [ { title: 'hello' } ]

Browser

import low from 'lowdb'
const db = low('db')

db.defaults({ posts: [] })
  .value()

// Data is automatically saved to localStorage
db.get('posts')
  .push({ title: 'lowdb' })
  .value()

Server

Please note that if you're developing a local server and don't expect to get concurrent requests, it's often easier to use file-sync storage, which is the default.

But if you need to avoid blocking requests, you can do so by using file-async storage.

const express = require('express')
const low = require('lowdb')
const fileAsync = require('lowdb/lib/file-async')

// Create server
const app = express()

// Start database using file-async storage
const db = low('db.json', {
  storage: fileAsync
})

// Init
db.defaults({ posts: [] })
  .value()

// Define posts
const posts = db.get('posts')

// Routes
// GET /posts/:id
app.get('/posts/:id', (req, res) => {
  const post = posts
    .find({ id: req.params.id })
    .value()

  res.send(post)
})

// POST /posts
app.post('/posts', (req, res) => {
  // Some basic id generation, use uuid ideally
  req.body.id = Date.now()

  // post will be created asynchronously in the background
  const post = posts
    .push(req.body)
    .last()
    .value()

  res.send(post)
})

app.listen(3000, () => console.log('Server is listening'))

In the example above, data is written asynchronously in the background. If you want to send the response only after it has been written, set writeOnChange to false and call db.write() manually.

const db = low('db.json', {
  storage: fileAsync,
  writeOnChange: false
})

//...
app.post('/posts', (req, res) => {
  const post = posts
    .push(req.body)
    .last()
    .value()

  db.write()
    .then(() => res.send(post))
})
// ...

In-memory

In this mode, no storage is used. Everything is done in memory.

You can still persist data but you'll have to do it yourself. Here's an example:

const fs = require('fs')
const db = low()

db.defaults({ posts: [] })
  .value()

db.get('posts')
  .push({ title: 'lowdb' })
  .value()

// Manual writing
fs.writeFileSync('db.json', JSON.stringify(db.getState()))

In this case, it's recommended to create a custom storage.