Silakan temukan kode di bawah ini. Jenis konten tidak ada
$.ajax({ url: '//localhost:3000/test/config', type: 'POST', dataType: 'json', contentType: 'application/json', data: JSON.stringify({ o: testJson }), // crossDomain: true, success: function (data) { alert('Success!') }, error: function (jqXHR, textStatus, err) { //show error message alert('text status ' + textStatus + ', err ' + err) } });Rute
app.post('/test/config', function (req, res) { console.log(req.body.o); }) _Saat Anda ingin menyimpan data antara server restart dengan Node, file JSON adalah pilihan yang sederhana dan nyaman. Apakah Anda sedang membaca file konfigurasi atau menyimpan data untuk aplikasi Anda, Node memiliki beberapa utilitas bawaan yang memudahkan untuk membaca dan menulis file JSON. Menggunakan file JSON di aplikasi Anda bisa menjadi cara yang berguna untuk mempertahankan data. Kami akan melihat beberapa metode berbeda untuk bekerja dengan file JSON
Dalam tutorial ini kita akan
- Baca data JSON dari disk
- Pelajari cara menggunakan modul const config = require("./config.json"); _4 untuk berinteraksi dengan sistem file
- Pertahankan data ke file JSON
- Gunakan const config = require("./config.json"); _5 dan const config = require("./config.json"); 6 untuk mengonversi data ke dan dari format JSON
Di akhir tutorial ini, Anda akan dapat bekerja dengan file JSON menggunakan modul const config = require("./config.json"); 4 bawaan Node
Sasaran
Katakanlah Anda memiliki pelanggan. file json disimpan ke disk yang menyimpan catatan untuk pelanggan di toko Anda
Sebagai bagian dari aplikasi toko Anda, Anda ingin mengakses alamat pelanggan, lalu memperbarui jumlah pesanan setelah pesanan dilakukan
Dalam tutorial ini, kita akan melihat cara membaca dan menulis ke pelanggan kita. file json
{ "name": "Mega Corp.", "order_count": 83, "address": "Infinity Loop Drive" } _Prasyarat
Jam tangan. Baca/Tulis File JSON
Berinteraksi dengan file dengan fs
Mengakses file di Node dilakukan dengan modul fs asli, yang memberi Anda fungsi untuk menonton, membaca, dan menulis file bersama dengan banyak alat lain untuk bekerja dengan sistem file. Karena ini adalah modul asli, kami dapat memintanya dalam kode kami tanpa menginstalnya. Hubungi saja const config = require("./config.json"); _8
Modul const config = require("./config.json"); _4 memberi kita opsi versi sinkron atau asinkron dari banyak fungsinya. Versi sinkron memblokir eksekusi kode lain hingga selesai mengakses sistem file, membaca, atau menulis data. Fungsi async akan berjalan tanpa memblokir kode lain. Pelajari lebih lanjut perilaku sinkronisasi/async
Perilaku sinkron ini dapat berguna di beberapa tempat, seperti saat startup saat membaca file konfigurasi sebelum kode lain dijalankan, tetapi menjadi masalah besar saat digunakan di server web tempat semua permintaan yang masuk akan diblokir saat pembacaan file sinkron sedang berjalan. Untuk alasan ini, Anda biasanya ingin menggunakan versi asinkron dari fungsi const config = require("./config.json"); 4 dalam kode Anda. Kami akan fokus pada operasi asinkron, tetapi juga akan menampilkan persamaan sinkron
Untuk membaca dan menulis file secara asinkron dengan const config = require("./config.json"); 4 kita akan menggunakan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 2 dan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 3
Kami juga akan menggunakan pembantu JSON global untuk mengonversi objek menjadi string JSON, dan string JSON menjadi objek
Baca file JSON
Cara paling sederhana untuk membaca file JSON adalah dengan memintanya. Meneruskan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 4 dengan jalur ke file JSON akan secara sinkron membaca dan mengurai data ke dalam objek JavaScript
const config = require("./config.json");Tetapi membaca file JSON dengan kebutuhan memiliki kelemahan. File hanya akan dibaca sekali; . Ini bagus untuk memuat data statis saat startup (seperti data konfigurasi). Tapi untuk membaca file yang berubah di disk, seperti pelanggan kami. json mungkin, kita perlu membaca file secara manual menggunakan asinkron const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 2
Baca file dengan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); _2
Untuk mengakses alamat pelanggan, kita perlu
- Baca data JSON dari file
- Parsing string JSON menjadi objek JavaScript
Untuk memuat data dari pelanggan. json, kami akan menggunakan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); _2, meneruskannya ke jalur ke file kami, jenis penyandian opsional, dan panggilan balik untuk menerima data file
Jika file berhasil dibaca, isinya akan diteruskan ke callback
const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); });- /pelanggan. json adalah jalur relatif ke file const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 8 adalah parameter opsional untuk penyandian file yang sedang kita baca, ini dapat diabaikan. Jika tidak ditentukan, fungsi akan mengembalikan ________11______9 alih-alih const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("Error reading file from disk:", err); return; } try { const customer = JSON.parse(jsonString); console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive" } catch (err) { console.log("Error parsing JSON string:", err); } }); 0
- const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("Error reading file from disk:", err); return; } try { const customer = JSON.parse(jsonString); console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive" } catch (err) { console.log("Error parsing JSON string:", err); } }); 1 adalah fungsi panggilan balik yang dijalankan setelah file dibaca
Sekarang kita memiliki isi file sebagai string JSON, tetapi kita perlu mengubah string menjadi sebuah objek
Sebelum kita dapat menggunakan data dari callback dalam kode kita, kita harus mengubahnya menjadi objek. const config = require("./config.json"); 5 mengambil data JSON sebagai input dan mengembalikan objek JavaScript baru. Jika tidak, kami hanya akan memiliki serangkaian data dengan properti yang tidak dapat kami akses
const config = require("./config.json"); 5 dapat memunculkan kesalahan pengecualian dan merusak program kami jika melewati string JSON yang tidak valid. Untuk mencegah mogok, kami membungkus JSON. parse dalam pernyataan coba tangkap untuk menangkap kesalahan apa pun dengan anggun
Contoh ini menunjukkan membaca dan mem-parsing file JSON
Menggunakan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("Error reading file from disk:", err); return; } try { const customer = JSON.parse(jsonString); console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive" } catch (err) { console.log("Error parsing JSON string:", err); } }); _4 dari membaca pelanggan. json, kami membuat objek, dan dapat mengakses properti alamat. Jika const config = require("./config.json"); 5 melempar kesalahan, kami menanganinya di blok const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("Error reading file from disk:", err); return; } try { const customer = JSON.parse(jsonString); console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive" } catch (err) { console.log("Error parsing JSON string:", err); } }); 6
Sekarang kami memiliki representasi objek dari data di pelanggan kami. file json
Kami juga dapat membaca file secara sinkron menggunakan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("Error reading file from disk:", err); return; } try { const customer = JSON.parse(jsonString); console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive" } catch (err) { console.log("Error parsing JSON string:", err); } }); 7. Alih-alih menerima panggilan balik, const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("Error reading file from disk:", err); return; } try { const customer = JSON.parse(jsonString); console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive" } catch (err) { console.log("Error parsing JSON string:", err); } }); _8 mengembalikan konten file setelah membaca file
try { // Note that jsonString will be a since we did not specify an // encoding type for the file. But it'll still work because JSON.parse() will // use .toString(). const jsonString = fs.readFileSync("./customer.json"); const customer = JSON.parse(jsonString); } catch (err) { console.log(err); return; } console.log(customer.address); // => "Infinity Loop Drive"Kita dapat menggunakan pengetahuan ini untuk membuat fungsi pembantu yang dapat digunakan kembali untuk membaca dan mengurai file JSON. Di sini kita membuat fungsi bernama const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("Error reading file from disk:", err); return; } try { const customer = JSON.parse(jsonString); console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive" } catch (err) { console.log("Error parsing JSON string:", err); } }); _9 yang akan membaca dan mengurai file JSON untuk kita. Dibutuhkan jalur ke file dan panggilan balik untuk menerima objek yang diuraikan dan kesalahan apa pun. Itu akan menangkap kesalahan apa pun yang dilemparkan oleh const config = require("./config.json"); 5 untuk kami
const fs = require("fs"); function jsonReader(filePath, cb) { fs.readFile(filePath, (err, fileData) => { if (err) { return cb && cb(err); } try { const object = JSON.parse(fileData); return cb && cb(null, object); } catch (err) { return cb && cb(err); } }); } jsonReader("./customer.json", (err, customer) => { if (err) { console.log(err); return; } console.log(customer.address); // => "Infinity Loop Drive" });Catatan tentang penyandian file
Baik const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("Error reading file from disk:", err); return; } try { const customer = JSON.parse(jsonString); console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive" } catch (err) { console.log("Error parsing JSON string:", err); } }); 7 dan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 2 menggunakan argumen opsional try { // Note that jsonString will be a since we did not specify an // encoding type for the file. But it'll still work because JSON.parse() will // use .toString(). const jsonString = fs.readFileSync("./customer.json"); const customer = JSON.parse(jsonString); } catch (err) { console.log(err); return; } console.log(customer.address); // => "Infinity Loop Drive" 3. Jika Anda menentukan pengkodean karakter, Anda akan mendapatkan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("Error reading file from disk:", err); return; } try { const customer = JSON.parse(jsonString); console.log("Customer address is:", customer.address); // => "Customer address is: Infinity Loop Drive" } catch (err) { console.log("Error parsing JSON string:", err); } }); 0 sebagai gantinya. Jika Anda tidak menentukan pengkodean karakter, kedua fungsi akan mengembalikan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 9
Ini karena Node tidak, dan tidak bisa, menganggap konten seperti apa yang ada di dalam file. Bahkan jika Anda bisa. Untuk mengatasi kurangnya definisi ini, Node akan membaca byte file untuk byte dan mengembalikannya sebagai buffer yang tidak diinginkan yang dapat Anda proses sesuai keinginan
Jika Anda mengetahui konten file, dan dapat memberikan detail tersebut ke Node dalam bentuk argumen try { // Note that jsonString will be a since we did not specify an // encoding type for the file. But it'll still work because JSON.parse() will // use .toString(). const jsonString = fs.readFileSync("./customer.json"); const customer = JSON.parse(jsonString); } catch (err) { console.log(err); return; } console.log(customer.address); // => "Infinity Loop Drive" 3, kode tersebut umumnya membuat kode lebih berkinerja dan lebih mudah dipahami
Menulis ke file dengan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 3
Menulis JSON ke sistem file mirip dengan membacanya. Kami akan menggunakan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); _3 untuk menulis data secara asinkron ke Pelanggan baru. file json
Pertama, untuk menulis data ke file JSON, kita harus membuat string data JSON dengan const config = require("./config.json"); 6. Ini mengembalikan representasi string JSON dari objek JavaScript, yang dapat ditulis ke file. Mirip dengan mem-parsing data menjadi objek saat membaca file, kita harus mengubah data kita menjadi string untuk dapat menulisnya ke file
Buat objek pelanggan dengan data kami di bawah ini, dan ubah menjadi string
const customer = { name: "Newbie Corp.", order_count: 0, address: "Po Box City" }; const jsonString = JSON.stringify(customer); console.log(jsonString); // => "{"name":"Newbie Co.","address":"Po Box City","order_count":0}"Catatan. Jika Anda mencoba menulis objek ke file tanpa merangkainya, file Anda akan kosong dan terlihat seperti ini
Setelah data dirangkai, kita dapat menggunakan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 3 untuk membuat file pelanggan baru. Kami melewati const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 3 jalur file, data pelanggan kami untuk ditulis, dan panggilan balik yang akan dijalankan setelah file ditulis. Jika Pelanggan baru. file json belum ada, itu akan dibuat;
Berikut adalah contoh penulisan file JSON dengan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 3
const fs = require('fs') const customer = { name: "Newbie Co.", order_count: 0, address: "Po Box City", } const jsonString = JSON.stringify(customer)fs.writeFile('./newCustomer.json', jsonString, err => { if (err) { console.log('Error writing file', err) } else { console.log('Successfully wrote file') } })Dan itu saja. Setelah panggilan balik berjalan, file telah ditulis ke disk. Catatan. kami hanya melewati objek kesalahan; . Kami juga dapat menulis file secara sinkron dengan cara yang sama menggunakan const fs = require("fs"); function jsonReader(filePath, cb) { fs.readFile(filePath, (err, fileData) => { if (err) { return cb && cb(err); } try { const object = JSON.parse(fileData); return cb && cb(null, object); } catch (err) { return cb && cb(err); } }); } jsonReader("./customer.json", (err, customer) => { if (err) { console.log(err); return; } console.log(customer.address); // => "Infinity Loop Drive" }); 3
const jsonString = JSON.stringify(customer)fs.writeFileSync('./newCustomer.json', jsonString)Setelah file Anda selesai ditulis, akan terlihat seperti ini
const config = require("./config.json"); 0Merangkai secara default menempatkan semua data Anda dalam satu baris. Opsional, Anda dapat membuat file keluaran dapat dibaca manusia dengan meneruskan jumlah spasi untuk diindentasi ke const config = require("./config.json"); 6
const config = require("./config.json"); 1Di atas, kami memberi tahu stringify untuk mengindentasi data dengan 2 spasi. Sekarang file keluaran Anda akan terlihat seperti ini
const config = require("./config.json"); 2Perbarui file JSON
Sekarang kita dapat membaca dan menulis file pelanggan kita, kita dapat menggunakannya sebagai database sederhana. Jika kita ingin mengupdate data dalam file JSON, kita dapat membaca isinya, mengubah data, dan kemudian menulis data baru kembali ke file
const config = require("./config.json"); _3Jelas bukan database paling efisien yang dapat Anda pilih, tetapi bekerja dengan file JSON seperti ini adalah cara sederhana untuk mempertahankan data dalam proyek Anda
Rekap
JSON adalah salah satu jenis data paling umum yang akan Anda kerjakan di Node, dan kemampuan membaca dan menulis file JSON sangat berguna. Anda telah mempelajari cara menggunakan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); _2 dan const fs = require("fs"); fs.readFile("./customer.json", "utf8", (err, jsonString) => { if (err) { console.log("File read failed:", err); return; } console.log("File data:", jsonString); }); 3 untuk bekerja secara asinkron dengan sistem file, serta cara mengurai data ke dan dari format JSON, dan menangkap kesalahan dari const config = require("./config.json"); 5
Anda dapat menggunakan persyaratan untuk membaca file JSON saat memulai untuk mengurai file JSON secara sinkron dalam satu baris. Dan sekarang Anda dapat menggunakan file JSON sederhana sebagai penyimpanan data
Jika Anda ingin mempelajari lebih lanjut, Anda dapat membaca tentang apa sebenarnya JSON itu, dan mengetahui lebih lanjut tentang kode sinkron vs asinkron