javascriptnode.jsvue.jsdesktoptauri

how to use sqlite in vue.js + tauri.js desktop app?


so my projects structure is the same as in vue project but also see a src-tauri folder in the root. i am little but confused in this structure and its dependencies because it seems like project in project.

so i created a services folder in src of my vue project and in database.js built a connection and configured some test query. and then i used it in my component :

import sqlite3 from 'sqlite3';// Create a database connection
const db = new sqlite3.Database('sqlite3.db', (err) => {
  if (err) {
    console.error('Database connection error:', err.message);
  }
  console.log('Connected to the SQLite database.');
});

// Example function to perform a query
function getUsers(callback) {
  db.all('SELECT * FROM barbers', (err, rows) => {
    if (err) {
      console.error('Error querying users:', err.message);
      return callback(err);
    }
    callback(null, rows);
  });
}

export default {getUsers}

// vue component 
<template>
    <h1>Base Test</h1>
</template>

<script>
    import getUsers  from '../services/database.js';

    export default {
    name: 'data',
    data() {
        return {
            users: []
        };
    },
    mounted() {
        getUsers((err, users) => {
        if (err) {
            console.error('Error getting users:', err);
            return;
        }
        this.users = users;
        console.log(this.users)
        });
    }
    };

</script>

but i got the following error after tauri js app start, please help !!!enter image description here

i tried a lot of different ways but the error persists , maybe i should use some browser compatible modules like sql.js instead ?


Solution

  • The code you're executing is running the node version. Tauri does not support node anywhere, but it does support the browser environment.

    Instead use tauri-plugin-sql

    Run cargo add tauri-plugin-sql -F sqlite

    Then add npm package via npm add @tauri-apps/plugin-sql

    In your rust code, call the builder like this:

      .plugin(tauri_plugin_sql::Builder::default().build())
    

    And finally execute your sql query:

    import Database from "@tauri-apps/plugin-sql";
    const db = await Database.load("sqlite:test.db");
    const response = await db.execute("'SELECT * FROM barbers");
    

    And remember to place your test.db inside of tauri::api::path::BaseDirectory::App folder.