【问题标题】:How use NeDB in nuxt project?如何在 nuxt 项目中使用 NeDB?
【发布时间】:2019-06-06 13:35:41
【问题描述】:

我遇到了这个问题:

在服务器我有 NeDB 数据文件 pages.json 在服务器端我想写一些这样的:

 const  datastore = require('nedb-promise')
 const db = datastore({ filename: './data/pages.json', autoload: true });
 const docs = await db.find({fruits: 'arbuz', a: {$lte: 10}})

pages.json 可通过 HTTP 获取,在客户端我写了这个:

 const db = new Nedb() // inmemory database
 $.get('/data/pages.json', resp => {
   const arr = resp.split('\n').filter(doc => !!doc).map(doc => JSON.parse(doc))
   db.insert(arr, (err, docs) => {
     console.log('all docs inserted')
   })  
   const docs = await db.find({fruits: 'arbuz', a: {$lte: 10}})
 })

这样,我的 db 在服务器和客户端都有相同的数据。

但我不明白如何将它集成到 Nuxt 项目中。我知道,nuxt 在存储中有 nuxtServerInit 操作。但它只在服务器上工作。

如何在服务器和客户端使用相同的数据集制作 db 对象?

【问题讨论】:

    标签: nuxt.js


    【解决方案1】:

    我找到了解决办法!

    在这两种情况下,我在服务器和浏览器中创建内存 NeDB 数据库,加载 pages.json,然后在 db 中进行批量插入。我写了一个简单的nuxt插件

     import datastore from 'nedb-promise'
     import axios from 'axios'
    
     const dbPages = new datastore()
    
     export default async ({ app }, inject) => {
       const {data} = await axios.get('http://localhost:3000/data/pages.db'),
             arr = data.split('\n').filter(doc => !!doc).map(doc => JSON.parse(doc))
       await dbPages.insert(arr)
       app.dbPages = dbPages
     }
    

    使用这个插件很简单:

       asyncData(context) {
         return context.app.dbPages.find({a: 5}).then(resp => {
           return {pages: resp}
         }).catch(err => console.log(err))
       }
    

    我希望这个解决方案对某人有用。

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 2022-07-03
      • 2020-02-08
      • 1970-01-01
      • 2021-05-21
      • 2020-02-19
      • 1970-01-01
      • 2018-02-21
      相关资源
      最近更新 更多