首页 > 其他分享 >【前端必会】使用indexedDB,降低环境搭建成本

【前端必会】使用indexedDB,降低环境搭建成本

时间:2022-09-28 00:34:32浏览次数:69  
标签:indexedDB name connection js webpack 必会 loader true 搭建

背景

  1. 学习前端新框架、新技术。如果需要做一些数据库的操作来增加demo的体验(CURD流程可以让演示的体验根据丝滑)
  2. 最开始的时候一个演示程序我们会调用后台,这样其实有一点弊端,就是增加了开发和维护成本,简单的一个demo不应该劳师动众
  3. 后来我会在demo中使用一些websql,奈何,websql也真的是没前景了。代码写起来也不是特别好
  4. 下面来介绍下今天的主角indexedDB和jsStore

介绍

  1. indexedDB可以给浏览器本地存储的能力,并且容量还比较大。
  2. jsStore只是众多封装的indexedDB库中的一个。可以用一种类似SQL的感觉操作数据

开始
package.json

{
  "name": "npm1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "lint": "eslint scripts/**",
    "fix": "eslint scripts/** --fix",
    "serve": "webpack serve"
  },
  "dependencies": {
    "jsstore": "^4.4.4",
    "lodash": "^4.17.21"
  },
  "devDependencies": {
    "css-loader": "^6.7.1",
    "eslint": "^8.23.1",
    "eslint-config-google": "^0.14.0",
    "eslint-config-prettier": "^8.5.0",
    "eslint-plugin-prettier": "^4.2.1",
    "file-loader": "^6.2.0",
    "html-webpack-plugin": "^5.5.0",
    "prettier": "2.7.1",
    "style-loader": "^3.3.1",
    "webpack": "^5.74.0",
    "webpack-cli": "^4.10.0",
    "webpack-dev-server": "^4.11.1"
  },
  "author": "",
  "license": "ISC"
}

webpack配置,添加了devServer配置

//webpack.config.js
 const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  context: path.resolve(__dirname),
  devServer: {
    static: {
      directory: path.join(__dirname, "dist"),
    },
    compress: true,
    port: 9000,
  },
  mode: "production",
  optimization: {
    minimize: false,
  },
  entry: "./src/main.js",
  target: ["web", "es5"],
  output: {
    clean: true,
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist"),
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "index.html",
    }),
  ],
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
};

jsStore链接帮助类,结合webpack+webworker。安装了file-loader

//store-connection.js
 import { Connection } from "jsstore";
const getWorkerPath = () => {
  // return dev build when env is development
  if (process.env.NODE_ENV === "development") {
    return require("file-loader?name=scripts/[name].[hash].js!jsstore/dist/jsstore.worker.js");
  } else {
    // return prod build when env is production

    return require("file-loader?name=scripts/[name].[hash].js!jsstore/dist/jsstore.worker.min.js");
  }
};

const workerPath = getWorkerPath().default;
export const connection = new Connection(new Worker(workerPath));

主逻辑

//main.js
 import { connection } from "./store-connection";

async function init() {
  var dbName = "JsStore_Demo";
  var tblProduct = {
    name: "Product",
    columns: {
      // Here "Id" is name of column
      id: { primaryKey: true, autoIncrement: true },
      itemName: { notNull: true, dataType: "string" },
      price: { notNull: true, dataType: "number" },
      quantity: { notNull: true, dataType: "number" },
    },
  };
  var database = {
    name: dbName,
    tables: [tblProduct],
  };

  const isDbCreated = await connection.initDb(database);
  if (isDbCreated === true) {
    console.log("db created");
    // here you can prefill database with some data
  } else {
    console.log("db opened");
  }

  var value = {
    itemName: "Blue Jeans",
    price: 2000,
    quantity: 1000,
  };

  var insertCount = await connection.insert({
    into: "Product",
    values: [value],
  });

  console.log(`${insertCount} rows inserted`);

  // results will be array of objects
  var results = await connection.select({
    from: "Product",
  });

  results.forEach((item) => {
    console.log(item);
  });
}

window.addEventListener("load", function () {
  console.log(connection);
  init();
});

数据已经存进去了

API插入、查询也没什么问题

总结

  1. 使用indexDB强化自己的demo体验,避免搭建后端环境,增加复杂度
  2. jsStore 的API多了解下,并且涉及的indexedDB的API都是异步的
  3. API没有啥,主要就是打开链接,事务,CRUD。语法参考下官网的例子即可

https://jsstore.net/tutorial/get-started/

标签:indexedDB,name,connection,js,webpack,必会,loader,true,搭建
From: https://www.cnblogs.com/lee35/p/16736557.html

相关文章

  • CentOS7.9 搭建Samba服务器
    一、Samba概述1.Samba简介Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。NFS与samba一样,也是在网络中实现文件共享的......
  • 【环境搭建】Anaconda&Pycharm环境配置
    Anaconda&Pycharm环境配置一、Anaconda安装与配置​ Step1:在CMD命令行输入以下两条命令:condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/p......
  • 01.base-sys 基础搭建
    脚手架base-sys0.简介1.基于SpringBoot+MybatisPlus-Plus的快速开发脚手架,具有完整的权限管理功能,前端使用Vue;2.技术选型:SpringBoot2.7.0容器+M......
  • 1:python3环境搭建和PyCharm配置
    python官网----https://www.python.org/1.查看历史版本2。下载指定的历史版本.   3.安装python  4.安装到指定目录(先创建一个python3的目录)  5修改......
  • 直播平台怎么搭建,实现js开光灯效果
    直播平台怎么搭建,实现js开光灯效果 <!DOCTYPEhtml><html><head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-sca......
  • 【体验有奖】使用 Serverless 1 步搭建照片平台!
    实验介绍当前,Serverless技术已经被广泛应用,Serverless=FaaS+BssS的概念已经深入人心。本场景由函数计算和RDSMySQLServerless联合打造,通过函数计算的快速部署......
  • 基于Delta区块链单节点的联邦隐私计算服务搭建手册
    参考文献Delta开发文档DeltaGithub地址使用subkey创建nodekey如果重新设置node-key需要。参考subkey官方文档安装subkeygitclonehttps://github.com/parit......
  • 前端必会概念
    闭包与递归相同点:1.两者都是函数的应用方式2.在函数内部中都有调用函数不同点:1.闭包调用内部的函数时需要引用外部的变量或参数,而递归不需要2.闭包自身只调用一次后......
  • MERN全栈框架搭建
    创建一个项目目录创建项目目录mern-demo搭建前端react框架进入项目目录mern-demo,初始化前端react框架npxcreate-react-appfrontend初始化完成后,前端项目目录格式如......
  • java开发环境搭建
    JDK下载下载链接:https://www.oracle.com/java/technologies/downloads/如果链接失效就去搜索Java官网找到download路径打开安装包,无脑next,可以更改一个想存放的目录。......