```js const low = require('lowdb') const FileSync = require('lowdb/adapters/FileSync')
const adapter = new FileSync('db.json') const db = low(adapter)
db.defaults({ posts: [] }) .write()
const result = db.get('posts') .push({ name: process.argv[2] }) .write()
console.log(result) ```
```sh $ node cli.js hello
```
```js import low from 'lowdb' import LocalStorage from 'lowdb/adapters/LocalStorage'
const adapter = new LocalStorage('db') const db = low(adapter)
db.defaults({ posts: [] }) .write()
// Data is automatically saved to localStorage db.get('posts') .push({ title: 'lowdb' }) .write() ```
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.
```js const express = require('express') const low = require('lowdb') const FileAsync = require('lowdb/adapters/FileAsync')
// Create server const app = express()
// Routes // GET /posts/:id app.get('/posts/:id', (req, res) => { const post = db.get('posts') .find({ id: req.params.id }) .value()
res.send(post) })
// POST /posts app.post('/posts', (req, res) => { db.get('posts') .push(req.body) .last() .assign({ id: Date.now() }) .write() .then(post => res.send(post)) })
// Create database instance and start server const adapter = new FileAsync('db.json') low(adapter) .then(db => { db.defaults({ posts: [] }) .write() }) .then(() => { app.listen(3000, () => console.log('listening on port 3000') }) ```
With this adapter, calling write
will do nothing. One use case for this adapter can be for tests.
```js const fs = require('fs') const low = require('low') const FileSync = require('low/adapters/FileSync') const Memory = require('low/adapters/Memory')
const db = low( process.env.NODE_ENV === 'test' ? new Memory() : new FileSync('db.json') )
db.defaults({ posts: [] }) .write()
db.get('posts') .push({ title: 'lowdb' }) .write() ```