社区首页 >问答首页 >在电子应用上使用LowDB

在电子应用上使用LowDB
EN

Stack Overflow用户
提问于 2016-04-18 08:13:29
回答 1查看 2.5K关注 0票数 0

我正在开发一个基本的应用程序与电子和AngularJS。为此,我使用电子样板(https://github.com/szwacz/electron-boilerplate),对于数据库,我使用LowDB(https://github.com/typicode/lowdb)。

我已经能够创建一个数据库(JSON)并从脚本中读取它。但我的问题是当我想要更新和保存。我可以更新,并且更改反映在JSON文件上,但是当我再次启动应用程序时,JSON具有与开始时相同的数据(它被覆盖)。

我认为这是电子样板的构建任务的一个问题,它总是覆盖文件。我以为当我完成发布应用程序的任务时,它会修复(Npm run release),但不会,它会覆盖json。

我正在加载数据库,因此:

代码语言:javascript
代码运行次数:0
复制
import low from 'lowdb';
import storage from 'lowdb/file-sync';
import {
    remote
}
from 'electron';
var fs = require('fs');

var app = remote.require('app');

const db = low(__dirname + '/db.json', {
    storage
});

document.addEventListener('DOMContentLoaded', function() {

db('users').push({
    'name': 'foo'
});

});

这个脚本是在开始时加载的,所以每次启动应用程序时,它都应该添加一个新条目。脚本在JSON文件中写入新条目,但是当启动重新启动时,JSON返回到以前的状态。

最后,我使用了localStorage,但我想使用LowDB将数据保存在本地。

下面是我之前评论过的关于app构建的任务(gulp文件):

代码语言:javascript
代码运行次数:0
复制
'use strict';

var pathUtil = require('path');
var Q = require('q');
var gulp = require('gulp');
var sass = require('gulp-sass');
var watch = require('gulp-watch');
var batch = require('gulp-batch');
var plumber = require('gulp-plumber');
var jetpack = require('fs-jetpack');

var bundle = require('./bundle');
var generateSpecImportsFile = require('./generate_spec_imports');
var utils = require('../utils');

var projectDir = jetpack;
var srcDir = projectDir.cwd('./app');
var destDir = projectDir.cwd('./build');

var paths = {
    copyFromAppDir: [
        './node_modules/**',
        './bower_components/**',
        './components/**',
        './scripts/**',
        './shared.services/**',
        './sections/**',
        './helpers/**',
        './db.json',
        './**/*.html',
        './**/*.+(jpg|png|svg|eot|ttf|woff|woff2)'
    ],
}

// -------------------------------------
// Tasks
// -------------------------------------

gulp.task('sass', ['clean'], function() {
    console.log('Compiling SASS...');
    gulp.src('app/styles/scss/main.scss')
        .pipe(sass().on('error', sass.logError))
        .pipe(gulp.dest(destDir.path('styles')));
});

gulp.task('watch:sass', function() {
    console.log('Watching SASS...');
    var sassWatcher = gulp.watch(['app/styles/scss/*.scss','app/**/**/*.scss'], ['sass']);

    sassWatcher.on('change', function(event) {
        console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
    });
gulp.src('app/styles/scss/main.scss')
        .pipe(sass().on('error', sass.logError))
        .pipe(gulp.dest(destDir.path('styles')));
});


gulp.task('clean', function (callback) {
    return destDir.dirAsync('.', { empty: true });
});


var copyTask = function () {
    return projectDir.copyAsync('app', destDir.path(), {
            overwrite: true,
            matching: paths.copyFromAppDir
        });
};
gulp.task('copy', ['clean'], copyTask);
gulp.task('copy-watch', copyTask);


var bundleApplication = function () {
    return Q.all([
            bundle(srcDir.path('background.js'), destDir.path('background.js')),
            bundle(srcDir.path('app.js'), destDir.path('app.js')),
            bundle(srcDir.path('script.js'), destDir.path('script.js')),
        ]);
};

var bundleSpecs = function () {
    return generateSpecImportsFile().then(function (specEntryPointPath) {
        return bundle(specEntryPointPath, destDir.path('spec.js'));
    });
};

var bundleTask = function () {
    if (utils.getEnvName() === 'test') {
        return bundleSpecs();
    }
    return bundleApplication();
};
gulp.task('bundle', ['clean'], bundleTask);
gulp.task('bundle-watch', bundleTask);




gulp.task('finalize', ['clean'], function () {
    var manifest = srcDir.read('package.json', 'json');

    // Add "dev" or "test" suffix to name, so Electron will write all data
    // like cookies and localStorage in separate places for each environment.
    switch (utils.getEnvName()) {
        case 'development':
            manifest.name += '-dev';
            manifest.productName += ' Dev';
            break;
        case 'test':
            manifest.name += '-test';
            manifest.productName += ' Test';
            break;
    }

    // Copy environment variables to package.json file for easy use
    // in the running application. This is not official way of doing
    // things, but also isn't prohibited ;)
    manifest.env = projectDir.read('config/env_' + utils.getEnvName() + '.json', 'json');

    destDir.write('package.json', manifest);
});


gulp.task('watch', function () {
    watch('app/**/*.js', batch(function (events, done) {
        gulp.start('bundle-watch', done);
    }));
    watch(paths.copyFromAppDir, { cwd: 'app' }, batch(function (events, done) {
        gulp.start('copy-watch', done);
    }));
    watch('app/**/scss/*.scss', batch(function (events, done) {
        gulp.start('watch:sass', done);
    }));
    watch('app/**/**/*.scss', batch(function (events, done) {
        gulp.start('watch:sass');
    }));
});


gulp.task('build', ['bundle', 'sass', 'copy', 'finalize']);

你怎么看,在'copyFromAppDir‘里面有一个db.json。这个文件是我的数据库,但我想要更新它,并且更改会持续存在,但我无法做到这一点。

致以亲切的问候!

EN

回答 1

Stack Overflow用户

发布于 2016-04-19 15:52:17

看起来你的吞咽任务“清理”正在覆盖你的db.json文件。因为您使用的是lowDB,所以这等同于覆盖您的数据库。如果从'copyFromAppDir‘数组中删除行'./db.json',,则更改应该保留下来。

如下所示:

代码语言:javascript
代码运行次数:0
复制
var paths = {
    copyFromAppDir: [
        './node_modules/**',
        './bower_components/**',
        './components/**',
        './scripts/**',
        './shared.services/**',
        './sections/**',
        './helpers/**',
        './**/*.html',
        './**/*.+(jpg|png|svg|eot|ttf|woff|woff2)'
    ],
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36688595

复制
相关文章
ftrace在应用上的使用
之前介绍通过命令行配置和使用ftrace功能,但是实际中,我们也会希望抓C/C++程序中某段代码的调度情况。笔者前不久就遇到这种问题,某个函数调用时延概率超过100ms,是为什么?这时候就需要在他们代码中使能ftrace抓执行此函数时候,任务的调度情况。
233333
2023/10/17
2230
Python和JavaScript在使用上有什么区别?
JavaScript和Python这两种语言非常流行和强大,但它们在部分语法的使用上却有着一些不同,如果你恰好对这些区别对比感兴趣,那么这篇文章中的内容可能会为你提供一些帮助。
葡萄城控件
2021/03/04
4.9K0
Python和JavaScript在使用上有什么区别?
RocketMQ 在使用上的一些排坑和优化
RocketMQ 在我们的项目中使用非常广泛,在使用的过程中,也遇到了很多的问题。比如没有多环境的隔离,在多个版本同时开发送测的情况下,互相干扰严重。RocketMQ 的投递可能会失败,导致丢失消息。另外开源版本的 RocketMQ 不支持任意时间精度的延时消息,仅支持特定的 level。在使用的过程中,我们做了一些针对性的优化,整理出了这篇文章。
挖坑的张师傅
2022/05/13
1.2K0
RocketMQ 在使用上的一些排坑和优化
企业应如何建设电子商务网站?电子商务网站有哪些功能?
相信年轻人都会对电子商务网站的名称感到熟悉,因为在互联网场景里面,电子商务网站较为常见,很多企业都有建设这类网站的需求,建设网站需要投入一定的人力资源和财力成本,企业应如何建设电子商务网站?电子商务网站的功能有哪些?
用户8715145
2021/11/11
2K0
终于在 JS 中用上 WeakMap 了!
当我在处理一个滑动组件时,遇到了一个问题,当我快速切换元素的打开和关闭状态时,如果不允许上一个动画完成,新动画最终会失控,阻断后面的动画效果。
ConardLi
2021/10/19
8650
终于在 JS 中用上 WeakMap 了!
session和cookie在使用上的区别_结识与认识的区别
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说session和cookie在使用上的区别_结识与认识的区别,希望能够帮助大家进步!!!
Java架构师必看
2022/10/24
4430
在虚拟机间NFV应用上使用采用DPDK的Open vSwitch
概述 数据平面开发套件(DPDK)可提供高性能的数据包处理库和用户空间驱动程序。自Open vSwitch(OVS)2.4版 (http://openvswitch.org/releases/NEWS-2.4.0)起,我们将可在OVS中使用DPDK优化的vHost路径。OVS自2.2版起开始提供DPDK支持。 将DPDK与OVS结合使用可为我们带来诸多性能优势。与其他基于DPDK的应用相同,我们可以在OVS中看到网络包吞吐量显著提升,延迟显著降低。 此外,DPDK包处理库还对OVS内的多个性能热点区域进行了
SDNLAB
2018/03/30
2K0
在虚拟机间NFV应用上使用采用DPDK的Open vSwitch
选择电子停车计时装置检定仪应注意这9点
随着社会的快速发展,汽车普及率的提高,城市停车设施已经成为了城市综合交通体系的重要组成部分,因此电子停车计时收费装置的校准也就显得尤为重要,根据多年从业经验,给大家总结了选择电子停车计时装置检定仪应该注意的9个要点,希望对计量检测行业的朋友有帮助。
时频专家
2021/06/18
4530
选择电子停车计时装置检定仪应注意这9点
iOS 开发中Masonry和SnapKit在使用上的一些区别
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/80253794
用户1451823
2018/09/13
1.3K0
iOS 开发中Masonry和SnapKit在使用上的一些区别
到底应不应该使用 lombok
Lombok是 一种Java™实用工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO) 。 它通过注释实现这一目的。 通过在开发环境中实现Lombok,开发人员可以节省构建诸如hashCode() 和 equals()这样的方法以及以往用来分类各种 accessor和 mutator的大量时间。
HoneyMoose
2022/07/13
4270
到底应不应该使用 lombok
在MySQL社区版中也用上审计插件
数据库审计功能主要将用户对数据库的各类操作行为记录审计日志,以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是企业数据安全体系的重要组成部分,等保测评中也要求有审计日志。对于 DBA 而言,数据库审计也极其重要,特别是发生人为事故后,审计日志便于进行责任追溯,问题查找。
老叶茶馆
2023/09/01
7230
在MySQL社区版中也用上审计插件
[- Flutter-技能篇 -] 使用Provider前你应了解Consumer
Flutter的状态管理三足鼎立,明媒正室当Provider莫属,可谓刘备级别的大佬,名正言顺。作为一个喜欢偷懒的人,能省则省。都知道Provider有一把梭,打遍天下无敌手。不过刷这两招,可要悠着点,否则代价就是性能。 Provider.of<XXX>(context).数据 Provider.of<XXX>(context).方法 ---- 一、一把梭 页面如下,第一个界面是四个色块,点击蓝色字时跳到紫色界面 这里进行了五次操作:状态同步实现,貌似表面上完美无瑕,而且一把梭就OK了,也很方便,BUT
张风捷特烈
2020/04/30
2.8K0
[- Flutter-技能篇 -] 使用Provider前你应了解Consumer
公有云使用上升,私有云使用下降
根据Interop ITX和InformationWeek的调查报告,公有云的使用率从2012年的30%几乎翻了一番,达到了57%,而私有云的使用率已经从52%下降到了40%。 而且根据进一步的预测,
静一
2018/03/27
1.8K0
公有云使用上升,私有云使用下降
[-NDK 导引篇 -] 在NDK开发之前你应知道的东西
前言 笔者看了一些NDK的项目。一些教程不是HelloWord就是直接整FFmpeg或OpenCV,可谓一个天一个地,而且目录结构和Android3.5的默认结构并不是太一致,一直没找到什么合心的文章。故写此文连接这天地,来总结一下在NDK开发之前你应知道的东西。 ---- 在此之前,先划分三类人,如果不认清自己是什么角色(垃圾)就去玩NDK,你会很糟心: user : 纯粹.so链接库使用者(伸手党) creator : 纯粹ndk开发者,创作.so链接库(创作家) designer : 在现
张风捷特烈
2020/04/30
6540
[-NDK 导引篇 -] 在NDK开发之前你应知道的东西
公有云使用上升,私有云使用下降
根据Interop ITX和InformationWeek的调查报告,公有云的使用率从2012年的30%几乎翻了一番,达到了57%,而私有云的使用率已经从52%下降到了40%。 而且根据进一步的预测,
SDNLAB
2018/03/30
1.9K0
公有云使用上升,私有云使用下降
QT程序在发布的时候应注意的地方
---恢复内容开始---     我们用QT开发好的应用程序,如果要发布到其他计算机上运行怎么办呢?我们在用VC编程时,单独运行编译好的可执行文件时,经常会发现提示缺少动态库。用QT编程也不例外,在一定程度上,编写好的QT程序会依赖一些动态链接库,包括MSVC运行库,已经QT自身的一些动态链接库。这是由于程序在编译时采用了动态链接的原因。如果我们在编译初期,就设置为静态编译,那么就不会出现这种情况了。动态链接机制是程序开发的一把双刃剑。     既然问题出现了,我们想着解决的办法。很自然的一种想法就是,程序
24K纯开源
2018/01/18
1.1K0
QT程序在发布的时候应注意的地方
在面试结束后应如何提问问题?
在面试结束后,面试官常常会问应聘者,有没有需要了解的问题。从我的面试经历来看,多数人在面对这个问题的时候,少有能提出有价值的问题。   一般来说,面试的时间一般都很短,这就意味着应聘者需要尽可能的去展示自己,而在面试结束后询问问题也是一个很好的注意。因为通过应聘者提出的询问,面试官也会判断该应聘者是否有强烈意向还是对提供的岗位兴趣寥寥,也回判断应聘者思考问题的深度,问出有价值的问题往往会给应聘者加分。   以下是一些常常产生有意义回答的例子: 贵公司提供什么产品和服务? 我可以看一下关键产品的演示吗? 贵公
张树臣
2018/05/15
8090
数据安全性思考:在云中应信任什么?
虽然云供应商尽力提供了他们的安全措施,但是关于合作伙伴、客户以及他们在安全方面努力的投诉依然存在。 对于Cirrity这样没有直属销售队伍而依托系统集成商和增值经销商(VAR)来推动其云服务销售的企业
静一
2018/03/23
7390
Uber在大数据运用上的惊人表现
Uber是一款提供出租车预订服务的智能手机应用,为需要搭车的用户和想要载客的司机搭建了沟通渠道。这项服务引起了很大争议,一方面普通的出租车司机抱怨Uber毁掉了他们的生计,另一方面民众担心Uber的司
灯塔大数据
2018/04/09
1.3K0
Uber在大数据运用上的惊人表现
Uber在大数据运用上的惊人表现
Uber是一款提供出租车预订服务的智能手机应用,为需要搭车的用户和想要载客的司机搭建了沟通渠道。这项服务引起了很大争议,一方面普通的出租车司机抱怨Uber毁掉了他们的生计,另一方面民众担心Uber的司
用户1737318
2018/06/06
6310

相似问题

在“表示”中使用“lowdb”的方法

16

如何在没有LowDB的电子中使用ES6?

16

如何使用lowdb查找内部数组?

10

LowDB获取值

126

在ERR_REQUIRE_ESM中使用lowdb结果

316
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文