summaryrefslogtreecommitdiff
path: root/node_modules/lowdb/examples/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/lowdb/examples/README.md')
-rw-r--r--node_modules/lowdb/examples/README.md135
1 files changed, 135 insertions, 0 deletions
diff --git a/node_modules/lowdb/examples/README.md b/node_modules/lowdb/examples/README.md
new file mode 100644
index 0000000..8e7022b
--- /dev/null
+++ b/node_modules/lowdb/examples/README.md
@@ -0,0 +1,135 @@
+# Examples
+
+## CLI
+
+```js
+// 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)
+```
+
+```sh
+$ node cli.js hello
+# [ { title: 'hello' } ]
+```
+
+## Browser
+
+```js
+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.
+
+```js
+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.
+
+```js
+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:
+
+```js
+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.