Lưu cài đặt người dùng trong Ứng dụng Electron (Atom Shell) ở đâu?


82

Tôi dường như không thể tìm thấy cơ chế tích hợp sẵn để lưu trữ cài đặt người dùng. Tôi đã hy vọng rằng electron cung cấp một phương pháp tiêu chuẩn để lưu trữ cài đặt của người dùng trên tất cả các nền tảng máy tính để bàn. Nếu chưa có tiền lệ cho việc này, tôi có thể tự mình triển khai, tôi chỉ không muốn chuyển sang giải pháp tùy chỉnh ngay lập tức. Nghiên cứu trực tuyến khá thưa thớt trong lĩnh vực này. Cảm ơn!


1
Tôi đã lưu trữ cài đặt của mình bằng localStorage nhưng tôi rất muốn biết thêm về cách thức hoạt động của điều này với Electron. Vì việc xóa localStorage rất lộn xộn và việc cài đặt lại ứng dụng Electron dường như không xóa được.
E. Sundin

Câu trả lời:


75

Mỗi nền tảng có các vị trí mặc định khác nhau cho các loại dữ liệu khác nhau. Vì vậy, nếu bạn muốn lưu trữ dữ liệu ở các vị trí mặc định dựa trên nền tảng, hãy xemapp.getPath(name)

Nó truy xuất một đường dẫn đến một thư mục hoặc tệp đặc biệt được liên kết với name.

Bạn cũng có thể sử dụng nó để phân biệt giữa dữ liệu người dùng muốn lưu và dữ liệu ứng dụng của bạn lưu mà bạn không muốn làm lộn xộn các thư mục người dùng.

Hoặc nếu bạn chỉ muốn lưu trữ các tệp liên quan đến một đường dẫn cụ thể, bạn có thể sử dụng app.setPath(name,path)


Chính xác những gì tôi đang tìm kiếm, tôi chỉ không biết tính năng này tồn tại! Cảm ơn!
CodeManiak

42

Tôi đã gặp phải vấn đề cụ thể này với ứng dụng Electron của mình và bài đăng này đã truyền cảm hứng cho tôi viết một mô-đun NPM có tên là electron-json-storage .

Mô-đun này cho phép dễ dàng ghi / đọc JSON đến / từ app.getPath('userData'):

const storage = require('electron-json-storage');

// Write
storage.set('foobar', { foo: 'bar' }).then(function() {

    // Read
    storage.get('foobar').then(function(object) {
        console.log(object.foo);
        // will print "bar"
    });

});

electron-json-storagelà tuyệt vời, sự lựa chọn khác làlowdb
JUO

6
Chỉ tò mò nhưng lợi thế của lưu trữ electron-json so với chỉ var someObj = JSON.parse(fs.readFileSync(path, {encoding: "utf8"}))fs.writeFileSync(path, JSON.stringify(someObj)});thậm chí làm cho nó không đồng bộ sẽ không thêm nhiều hơn một vài dòng.
gman

3
Cũng nhìn vào cài đặt electron .
k7sleeper

Tài nguyên tuyệt vời. Mặc dù, có vẻ như thư viện không hỗ trợ các lời hứa nguyên bản như bạn có trong ví dụ.
Keith Holliday

1
Mỗi phần phụ thuộc bạn thêm vào là một diện tích bề mặt lớn hơn để khai thác, nhưng một đoạn mã khác phải cập nhật liên tục và nếu bạn là một nhà phát triển chuyên nghiệp, bạn cũng cần phải kiểm tra mã. Việc sử dụng cả một thư viện cồng kềnh chỉ để thay thế 2 dòng mã được cho là một thực tiễn tồi.
gman,

14

Electron không cung cấp cho bạn bất cứ điều gì ngoài hộp cho việc này. Tuy nhiên, Electron cung cấp cho bạn một phương pháp để lấy vị trí lưu trữ dữ liệu người dùng theo cách đa nền tảng thông qua API app.getPath .

Tôi muốn nói 3 cách phổ biến nhất để làm điều này là:

  • localStorage (hoặc bất kỳ API lưu trữ HTML5 nào)
  • tệp JSON phẳng (đây là những gì tôi làm và tôi sử dụng cửa hàng điện tử cho nó)
  • cơ sở dữ liệu nhúng như IndexedDB, neDB hoặc sqlite

Cái nào bạn chọn sẽ phụ thuộc vào nhu cầu của ứng dụng của bạn. Nếu bạn chỉ cần truy cập dữ liệu này trong quá trình kết xuất, thì tôi chỉ cần sử dụng localStorage. Hầu hết thời gian, có vẻ như bạn cần truy cập dữ liệu trong cả trình kết xuất và kết xuất chính, vì vậy tệp JSON có ý nghĩa. Nếu bạn đang xử lý nhiều dữ liệu hoặc truy vấn phức tạp, thì cơ sở dữ liệu có thể có ý nghĩa. Tôi đã viết về điều này chi tiết hơn ở đây .


5

Làm thế nào về LocalStorage? Nếu bạn cần truy cập các cài đặt này từ quy trình trình duyệt, bạn có thể cần phải viết của riêng mình (hoặc chỉ sử dụng thư viện node.js thực hiện điều này)


1

Cách tốt nhất mà tôi đã tìm thấy là lưu trữ nó trong một tệp đơn giản dưới dạng JSON. Vấn đề là nếu bạn lưu trữ JSON đó trong ứng dụng dir, thì khi bạn cập nhật ứng dụng, nó sẽ bị xóa. Vì vậy, bạn muốn đặt nó trong thư mục mặc định cho cài đặt người dùng cho hệ điều hành hiện tại. MAY MẮN THAY!!!!! Có một thư viện dành cho các nhà phát triển nút sẽ giúp bạn tìm thấy thư mục userdata. Mô-đun được gọi appdirectory, và tôi đã sử dụng nó vài lần. Thật sự rất dễ dàng để sử dụng.

Xem PHỤ LỤC TẠI ĐÂY


1
hoặc chỉgetPath(userData)
Dan

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.