- โมดูลนี้จะเลิกใช้งานเร็วๆ นี้ เนื่องจากถูกแทนที่โดย
abstract-level
levelup(db[, options[, callback]])
db.supports
db.open([options][, callback])
db.close([callback])
db.put(key, value[, options][, callback])
db.get(key[, options][, callback])
db.getMany(keys[, options][, callback])
db.del(key[, options][, callback])
db.batch(array[, options][, callback])
(ฟอร์มอาร์เรย์)db.batch()
(รูปแบบที่ถูกล่ามโซ่)db.status
db.isOperational()
db.createReadStream([options])
db.createKeyStream([options])
db.createValueStream([options])
db.iterator([options])
db.clear([options][, callback])
db.createWriteStream
? การจัดเก็บที่รวดเร็วและง่ายดาย Wrapper ของ Node.js สำหรับร้านค้าที่สอดคล้อง abstract-leveldown
ซึ่งเป็นไปตามลักษณะของ LevelDB
LevelDB เป็นที่จัดเก็บคีย์-ค่าอย่างง่ายที่สร้างโดย Google ใช้ใน Google Chrome และผลิตภัณฑ์อื่นๆ อีกมากมาย LevelDB รองรับอาร์เรย์ไบต์ที่กำหนดเองเป็นทั้งคีย์และค่า การดำเนินการ get เดี่ยว การวาง และการ ลบ การวางและลบเป็น กลุ่ม ตัววนซ้ำแบบสองทิศทาง และการบีบอัดอย่างง่ายโดยใช้อัลกอริธึม Snappy ที่รวดเร็วมาก
LevelDB จัดเก็บรายการเรียงตามพจนานุกรมตามคีย์ สิ่งนี้ทำให้อินเทอร์เฟซการสตรีมของ levelup
- ซึ่งทำให้ตัววนซ้ำของ LevelDB เป็นสตรีมที่อ่านได้ - กลไกการสืบค้นที่ทรงพลังมาก
ร้านค้าที่พบบ่อยที่สุดคือ leveldown
ซึ่งมีการเชื่อมโยง C++ เข้ากับ LevelDB อย่างแท้จริง มีร้านค้าทางเลือกมากมาย เช่น level.js
ในเบราว์เซอร์หรือ memdown
สำหรับร้านค้าในหน่วยความจำ โดยทั่วไปจะรองรับสตริงและบัฟเฟอร์สำหรับทั้งคีย์และค่า สำหรับชุดประเภทข้อมูลที่สมบูรณ์ยิ่งขึ้น คุณสามารถล้อมร้านค้าด้วย encoding-down
แพ็คเกจ level
เป็นวิธีที่แนะนำในการเริ่มต้น มันรวมกลุ่ม levelup
, leveldown
และ encoding-down
ไว้อย่างสะดวก การส่งออกหลักคือ levelup
- เช่นคุณสามารถทำได้ var db = require('level')
เรามุ่งหวังที่จะสนับสนุน Active LTS และ Node.js ปัจจุบัน รวมถึงเบราว์เซอร์ สำหรับการสนับสนุนร้านค้าพื้นฐาน โปรดดูเอกสารประกอบที่เกี่ยวข้อง
หากคุณกำลังอัปเกรด: โปรดดูที่ UPGRADING.md
ก่อนอื่นคุณต้องติดตั้ง levelup
! ไม่มีร้านค้ารวมอยู่ด้วย ดังนั้นคุณต้องติดตั้ง leveldown
ด้วย (ตัวอย่าง)
$ npm install levelup leveldown
การดำเนินการทั้งหมดเป็นแบบอะซิงโครนัส หากคุณไม่โทรกลับ สัญญาจะถูกส่งกลับ
var levelup = require ( 'levelup' )
var leveldown = require ( 'leveldown' )
// 1) Create our store
var db = levelup ( leveldown ( './mydb' ) )
// 2) Put a key & value
db . put ( 'name' , 'levelup' , function ( err ) {
if ( err ) return console . log ( 'Ooops!' , err ) // some kind of I/O error
// 3) Fetch by key
db . get ( 'name' , function ( err , value ) {
if ( err ) return console . log ( 'Ooops!' , err ) // likely the key was not found
// Ta da!
console . log ( 'name=' + value )
} )
} )
levelup(db[, options[, callback]])
จุดเริ่มต้นหลักสำหรับการสร้างอินสแตนซ์ levelup
ใหม่
db
ต้องเป็นร้านค้าที่สอดคล้อง abstract-leveldown
options
จะถูกส่งต่อไปยังร้านค้าพื้นฐานเมื่อเปิดและจะระบุเฉพาะประเภทของร้านค้าที่ใช้งานอยู่ การเรียก levelup(db)
จะเปิดร้านค้าพื้นฐานด้วย นี่คือการดำเนินการแบบอะซิงโครนัสซึ่งจะทริกเกอร์การโทรกลับของคุณหากคุณระบุ การโทรกลับควรใช้ function (err, db) {}
โดยที่ db
คืออินสแตนซ์ levelup
หากคุณไม่ได้ให้การติดต่อกลับ การดำเนินการอ่านและเขียนใดๆ จะถูกจัดคิวภายในจนกว่าร้านค้าจะเปิดโดยสมบูรณ์ เว้นแต่จะไม่สามารถเปิดได้ ซึ่งในกรณีนี้จะเกิดเหตุการณ์ error
ขึ้น
สิ่งนี้นำไปสู่ทางเลือกสองวิธีในการจัดการอินสแตนซ์ levelup
:
levelup ( leveldown ( location ) , options , function ( err , db ) {
if ( err ) throw err
db . get ( 'foo' , function ( err , value ) {
if ( err ) return console . log ( 'foo does not exist' )
console . log ( 'got foo =' , value )
} )
} )
เทียบกับสิ่งที่เทียบเท่า:
// Will throw if an error occurs
var db = levelup ( leveldown ( location ) , options )
db . get ( 'foo' , function ( err , value ) {
if ( err ) return console . log ( 'foo does not exist' )
console . log ( 'got foo =' , value )
} )
db.supports
รายการแบบอ่านอย่างเดียว อาจจะใช้ดังนี้:
if ( ! db . supports . permanence ) {
throw new Error ( 'Persistent storage is required' )
}
if ( db . supports . bufferKeys && db . supports . promises ) {
await db . put ( Buffer . from ( 'key' ) , 'value' )
}
db.open([options][, callback])
เปิดร้านค้าพื้นฐาน โดยทั่วไปคุณไม่จำเป็นต้องเรียกใช้เมธอดนี้โดยตรง เนื่องจาก levelup()
จะถูกเรียกโดยอัตโนมัติ อย่างไรก็ตาม มีความเป็นไปได้ที่จะเปิดร้านค้าอีกครั้งหลังจากปิดไปแล้วด้วย close()
หากไม่มีการโทรกลับ สัญญาจะถูกส่งกลับ
db.close([callback])
close()
ปิดร้านค้าพื้นฐาน การโทรกลับจะได้รับข้อผิดพลาดใด ๆ ที่พบระหว่างการปิดเป็นอาร์กิวเมนต์แรก
คุณควรล้างอินสแตนซ์ levelup
ของคุณโดยการเรียก close()
เมื่อคุณไม่ต้องการมันเพื่อเพิ่มทรัพยากรอีกต่อไป ร้านค้าไม่สามารถเปิดได้โดยการ levelup
หลาย ๆ ครั้งพร้อมกัน
หากไม่มีการโทรกลับ สัญญาจะถูกส่งกลับ
db.put(key, value[, options][, callback])
put()
เป็นวิธีการหลักในการแทรกข้อมูลลงในร้านค้า ทั้ง key
และ value
สามารถเป็นประเภทใดก็ได้เท่าที่เกี่ยวข้องกับ levelup
options
จะถูกส่งต่อไปยังร้านค้าที่เกี่ยวข้อง
หากไม่มีการโทรกลับ สัญญาจะถูกส่งกลับ
db.get(key[, options][, callback])
รับค่าจากร้านค้าด้วย key
key
สามารถเป็นประเภทใดก็ได้ หากไม่มีอยู่ในร้านค้า การโทรกลับหรือสัญญาจะได้รับข้อผิดพลาด ข้อผิดพลาดที่ไม่พบวัตถุจะเป็นประเภท 'NotFoundError'
ดังนั้นคุณสามารถ err.type == 'NotFoundError'
หรือคุณสามารถทำการทดสอบความจริงกับคุณสมบัติ err.notFound
db . get ( 'foo' , function ( err , value ) {
if ( err ) {
if ( err . notFound ) {
// handle a 'NotFoundError' here
return
}
// I/O or other error, pass it up the callback chain
return callback ( err )
}
// .. handle `value` here
} )
ออบเจ็ options
ต์ตัวเลือกเสริมจะถูกส่งไปยังร้านค้าที่เกี่ยวข้อง
หากไม่มีการโทรกลับ สัญญาจะถูกส่งกลับ
db.getMany(keys[, options][, callback])
รับค่าหลายค่าจากร้านค้าด้วยอาร์เรย์ของ keys
ออบเจ็ options
ต์ตัวเลือกเสริมจะถูกส่งไปยังร้านค้าที่เกี่ยวข้อง
ฟังก์ชัน callback
จะถูกเรียกพร้อมกับ Error
หากการดำเนินการล้มเหลวไม่ว่าด้วยเหตุผลใดก็ตาม หากสำเร็จ อาร์กิวเมนต์แรกจะเป็น null
และอาร์กิวเมนต์ที่สองจะเป็นอาร์เรย์ของค่าที่มีลำดับเดียวกันกับ keys
หากไม่พบคีย์ ค่าที่เกี่ยวข้องจะ undefined
หากไม่มีการโทรกลับ สัญญาจะถูกส่งกลับ
db.del(key[, options][, callback])
del()
เป็นวิธีการหลักในการลบข้อมูลออกจากร้านค้า
db . del ( 'foo' , function ( err ) {
if ( err )
// handle I/O or other error
} ) ;
options
จะถูกส่งต่อไปยังร้านค้าที่เกี่ยวข้อง
หากไม่มีการโทรกลับ สัญญาจะถูกส่งกลับ
db.batch(array[, options][, callback])
(ฟอร์มอาร์เรย์) batch()
สามารถใช้สำหรับการดำเนินการเขียนจำนวนมากที่รวดเร็วมาก (ทั้ง ใส่ และ ลบ ) อาร์กิวเมนต์ array
ควรมีรายการการดำเนินการที่จะดำเนินการตามลำดับ แม้ว่าโดยรวมแล้วจะดำเนินการเป็นการดำเนินการแบบอะตอมมิกภายในร้านค้าต้นแบบก็ตาม
การดำเนินการแต่ละรายการมีอยู่ในออบเจ็กต์ที่มีคุณสมบัติดังต่อไปนี้: type
, key
, value
โดยที่ ประเภท จะเป็น 'put'
หรือ 'del'
ในกรณีของ 'del'
คุณสมบัติ value
จะถูกละเว้น รายการใดๆ ที่มี key
เป็น null
หรือ undefined
จะทำให้เกิดข้อผิดพลาดใน callback
และ type: 'put'
ที่มี value
เป็น null
หรือ undefined
จะส่งกลับข้อผิดพลาด
const ops = [
{ type : 'del' , key : 'father' } ,
{ type : 'put' , key : 'name' , value : 'Yuri Irsenovich Kim' } ,
{ type : 'put' , key : 'dob' , value : '16 February 1941' } ,
{ type : 'put' , key : 'spouse' , value : 'Kim Young-sook' } ,
{ type : 'put' , key : 'occupation' , value : 'Clown' }
]
db . batch ( ops , function ( err ) {
if ( err ) return console . log ( 'Ooops!' , err )
console . log ( 'Great success dear leader!' )
} )
options
จะถูกส่งต่อไปยังร้านค้าที่เกี่ยวข้อง
หากไม่มีการโทรกลับ สัญญาจะถูกส่งกลับ
db.batch()
(รูปแบบที่ถูกล่ามโซ่) batch()
เมื่อถูกเรียกโดยไม่มีข้อโต้แย้งจะส่งคืนวัตถุ Batch
ซึ่งสามารถใช้ในการสร้างและยอมรับการดำเนินการแบตช์แบบอะตอมมิกในที่สุด ขึ้นอยู่กับวิธีการใช้งาน เป็นไปได้ที่จะได้รับประสิทธิภาพที่ดีขึ้นเมื่อใช้รูปแบบ chained ของ batch()
บนฟอร์มอาร์เรย์
db . batch ( )
. del ( 'father' )
. put ( 'name' , 'Yuri Irsenovich Kim' )
. put ( 'dob' , '16 February 1941' )
. put ( 'spouse' , 'Kim Young-sook' )
. put ( 'occupation' , 'Clown' )
. write ( function ( ) { console . log ( 'Done!' ) } )
batch.put(key, value[, options])
จัดคิวการดำเนินการ วาง บนแบตช์ปัจจุบัน ไม่ถูกคอมมิตจนกว่าจะมีการเรียก write()
บนแบตช์ อาร์กิวเมนต์ options
(ถ้ามี) จะต้องเป็นออบเจ็กต์และถูกส่งผ่านไปยังร้านค้าต้นแบบ
วิธีนี้อาจ throw
WriteError
หากมีปัญหากับการใส่ของคุณ (เช่น value
เป็น null
หรือ undefined
)
batch.del(key[, options])
จัดคิวการดำเนินการ del บนแบตช์ปัจจุบัน จะไม่ถูกคอมมิตจนกว่าจะมีการเรียกใช้ write()
บนแบตช์ อาร์กิวเมนต์ options
(ถ้ามี) จะต้องเป็นออบเจ็กต์และถูกส่งผ่านไปยังร้านค้าต้นแบบ
วิธีนี้อาจ throw
WriteError
หากมีปัญหาในการลบของคุณ
batch.clear()
ล้างการดำเนินการที่เข้าคิวทั้งหมดในชุดปัจจุบัน การดำเนินการก่อนหน้านี้จะถูกยกเลิก
batch.length
จำนวนการดำเนินการที่อยู่ในคิวในชุดปัจจุบัน
batch.write([options][, callback])
คอมมิตการดำเนินการที่อยู่ในคิวสำหรับแบตช์นี้ การดำเนินการทั้งหมดที่ไม่ ถูกล้าง จะถูกเขียนไปยังร้านค้าต้นแบบแบบอะตอม นั่นคือ การดำเนินการทั้งหมดจะสำเร็จหรือล้มเหลวโดยไม่มีการคอมมิตบางส่วน
ออบ options
เลือกที่เป็นทางเลือกจะถูกส่งผ่านไปยังการดำเนินการ .write()
ของออบเจ็กต์แบตช์พื้นฐาน
หากไม่มีการโทรกลับ สัญญาจะถูกส่งกลับ
db.status
สตริงแบบอ่านอย่างเดียวที่เป็นหนึ่งใน:
new
- สร้างขึ้นใหม่ ไม่เปิดหรือปิดopening
- รอร้านค้าพื้นฐานที่จะเปิดopen
- เปิดร้านสำเร็จพร้อมใช้งานclosing
-รอร้านปิดclosed
- ร้านค้าถูกปิดเรียบร้อยแล้วdb.isOperational()
คืนค่า true
หากร้านค้ายอมรับการดำเนินการ ซึ่งในกรณีของ levelup
หมายความว่า status
นั้นเป็นการ opening
หรือ open
เนื่องจากร้านค้าจะเปิดขึ้นเองและเข้าคิวการดำเนินการจนกว่าจะเปิด
db.createReadStream([options])
ส่งกลับกระแสที่อ่านได้ของคู่คีย์-ค่า คู่คือวัตถุที่มีคุณสมบัติ key
และ value
ตามค่าเริ่มต้น ระบบจะสตรีมรายการทั้งหมดในร้านค้าที่เกี่ยวข้องตั้งแต่ต้นจนจบ ใช้ตัวเลือกที่อธิบายไว้ด้านล่างเพื่อควบคุมช่วง ทิศทาง และผลลัพธ์
db . createReadStream ( )
. on ( 'data' , function ( data ) {
console . log ( data . key , '=' , data . value )
} )
. on ( 'error' , function ( err ) {
console . log ( 'Oh my!' , err )
} )
. on ( 'close' , function ( ) {
console . log ( 'Stream closed' )
} )
. on ( 'end' , function ( ) {
console . log ( 'Stream ended' )
} )
คุณสามารถระบุออบเจ็กต์ตัวเลือกเป็นพารามิเตอร์แรกเพื่อ createReadStream()
ด้วยคุณสมบัติต่อไปนี้:
gt
(มากกว่า), gte
(มากกว่าหรือเท่ากับ) กำหนดขอบเขตล่างของช่วงที่จะสตรีม เฉพาะรายการที่คีย์มากกว่า (หรือเท่ากับ) ตัวเลือกนี้เท่านั้นที่จะรวมไว้ในช่วง เมื่อ reverse=true
ลำดับจะถูกกลับรายการ แต่รายการที่สตรีมจะเหมือนเดิม
lt
(น้อยกว่า), lte
(น้อยกว่าหรือเท่ากับ) กำหนดขอบเขตที่สูงกว่าของช่วงที่จะสตรีม เฉพาะรายการที่คีย์น้อยกว่า (หรือเท่ากับ) ตัวเลือกนี้เท่านั้นที่จะรวมไว้ในช่วง เมื่อ reverse=true
ลำดับจะถูกกลับรายการ แต่รายการที่สตรีมจะเหมือนเดิม
reverse
(บูลีน ค่าเริ่มต้น: false
) : รายการสตรีมในลำดับย้อนกลับ ระวังว่าเนื่องจากวิธีการทำงานของร้านค้าเช่น LevelDB การค้นหาแบบย้อนกลับอาจช้ากว่าการค้นหาแบบไปข้างหน้า
limit
(หมายเลข ค่าเริ่มต้น: -1
) : จำกัดจำนวนรายการที่รวบรวมโดยสตรีมนี้ หมายเลขนี้แสดงถึงจำนวนรายการ สูงสุด และอาจไม่ถึงหากคุณไปถึงจุดสิ้นสุดของช่วงก่อน ค่า -1
หมายความว่าไม่มีขีดจำกัด เมื่อ reverse=true
รายการที่มีคีย์สูงสุดจะถูกส่งกลับแทนคีย์ต่ำสุด
keys
(บูลีน ค่าเริ่มต้น: true
) : ผลลัพธ์ควรมีคีย์หรือไม่ หากตั้งค่าเป็น true
และตั้ง values
เป็น false
ผลลัพธ์ก็จะเป็นเพียงคีย์ แทนที่จะเป็นออบเจ็กต์ที่มีคุณสมบัติ key
ใช้ภายในโดยเมธอด createKeyStream()
values
(บูลีน ค่าเริ่มต้น: true
) : ผลลัพธ์ควรมีค่าหรือไม่ หากตั้งค่าเป็น true
และ keys
ตั้งค่าเป็น false
ผลลัพธ์ก็จะเป็นเพียงค่า แทนที่จะเป็นออบเจ็กต์ที่มีคุณสมบัติ value
ใช้ภายในโดยเมธอด createValueStream()
db.createKeyStream([options])
ส่งคืนสตรีมคีย์ที่อ่านได้แทนที่จะเป็นคู่คีย์-ค่า ใช้ตัวเลือกเดียวกันกับที่อธิบายไว้สำหรับ createReadStream()
เพื่อควบคุมช่วงและทิศทาง
คุณยังสามารถรับสตรีมนี้ได้โดยการส่งออบเจ็กต์ตัวเลือกไปยัง createReadStream()
โดยมี keys
ที่ตั้งค่าเป็น true
และ values
ที่ตั้งค่าเป็น false
ผลลัพธ์ที่ได้จะเทียบเท่ากัน สตรีมทั้งสองทำงานในโหมดอ็อบเจ็กต์
db . createKeyStream ( )
. on ( 'data' , function ( data ) {
console . log ( 'key=' , data )
} )
// same as:
db . createReadStream ( { keys : true , values : false } )
. on ( 'data' , function ( data ) {
console . log ( 'key=' , data )
} )
db.createValueStream([options])
ส่งคืนสตรีมค่าที่อ่านได้แทนที่จะเป็นคู่คีย์-ค่า ใช้ตัวเลือกเดียวกันกับที่อธิบายไว้สำหรับ createReadStream()
เพื่อควบคุมช่วงและทิศทาง
คุณยังสามารถรับสตรีมนี้ได้โดยการส่งออบเจ็กต์ตัวเลือกไปยัง createReadStream()
โดยมี values
ที่ตั้งค่าเป็น true
และ keys
ที่ตั้งค่าเป็น false
ผลลัพธ์ที่ได้จะเทียบเท่ากัน สตรีมทั้งสองทำงานในโหมดอ็อบเจ็กต์
db . createValueStream ( )
. on ( 'data' , function ( data ) {
console . log ( 'value=' , data )
} )
// same as:
db . createReadStream ( { keys : false , values : true } )
. on ( 'data' , function ( data ) {
console . log ( 'value=' , data )
} )
db.iterator([options])
ส่งคืนตัววน abstract-leveldown
ซึ่งเป็นสิ่งที่ขับเคลื่อนสตรีมที่อ่านได้ด้านบน ตัวเลือกจะเหมือนกับตัวเลือกช่วงของ createReadStream()
และจะถูกส่งผ่านไปยังร้านค้าที่เกี่ยวข้อง
ตัววนซ้ำเหล่านี้รองรับ for await...of
:
for await ( const [ key , value ] of db . iterator ( ) ) {
console . log ( value )
}
db.clear([options][, callback])
ลบรายการหรือช่วงทั้งหมด ไม่รับประกันว่าเป็นอะตอม ยอมรับตัวเลือกช่วงต่อไปนี้ (โดยใช้กฎเดียวกันกับตัววนซ้ำ):
gt
(มากกว่า), gte
(มากกว่าหรือเท่ากับ) กำหนดขอบเขตล่างของช่วงที่จะลบ เฉพาะรายการที่คีย์มากกว่า (หรือเท่ากับ) ตัวเลือกนี้เท่านั้นที่จะรวมไว้ในช่วง เมื่อ reverse=true
ลำดับจะถูกกลับรายการ แต่รายการที่ถูกลบจะเหมือนเดิมlt
(น้อยกว่า), lte
(น้อยกว่าหรือเท่ากับ) กำหนดขอบเขตที่สูงกว่าของช่วงที่จะถูกลบ เฉพาะรายการที่คีย์น้อยกว่า (หรือเท่ากับ) ตัวเลือกนี้เท่านั้นที่จะรวมไว้ในช่วง เมื่อ reverse=true
ลำดับจะถูกกลับรายการ แต่รายการที่ถูกลบจะเหมือนเดิมreverse
(บูลีน ค่าเริ่มต้น: false
) : ลบรายการในลำดับย้อนกลับ มีผลเฉพาะเมื่อใช้ร่วมกับ limit
เพื่อลบระเบียน N สุดท้ายlimit
(หมายเลข ค่าเริ่มต้น: -1
) : จำกัดจำนวนรายการที่จะลบ หมายเลขนี้แสดงถึงจำนวนรายการ สูงสุด และอาจไม่ถึงหากคุณไปถึงจุดสิ้นสุดของช่วงก่อน ค่า -1
หมายความว่าไม่มีขีดจำกัด เมื่อ reverse=true
รายการที่มีคีย์สูงสุดจะถูกลบแทนคีย์ต่ำสุด หากไม่มีตัวเลือกใดๆ รายการทั้งหมดจะถูกลบ ฟังก์ชัน callback
จะถูกเรียกโดยไม่มีข้อโต้แย้งหากการดำเนินการสำเร็จหรือมี WriteError
หากล้มเหลวไม่ว่าด้วยเหตุผลใดก็ตาม
หากไม่มีการโทรกลับ สัญญาจะถูกส่งกลับ
db.createWriteStream
? db.createWriteStream()
ถูกลบออกเพื่อให้มีคอร์ที่เล็กลงและสามารถบำรุงรักษาได้มากขึ้น โดยพื้นฐานแล้วมีไว้เพื่อสร้างสมมาตรด้วย db.createReadStream()
แต่จากการพูดคุยกันมากมาย การลบออกจึงเป็นแนวทางปฏิบัติที่ดีที่สุด
ตัวขับเคลื่อนหลักสำหรับสิ่งนี้คือประสิทธิภาพ แม้ว่า db.createReadStream()
จะทำงานได้ดีภายใต้กรณีการใช้งานส่วนใหญ่ db.createWriteStream()
จะขึ้นอยู่กับคีย์และค่าของแอปพลิเคชันเป็นอย่างมาก ดังนั้นเราจึงไม่สามารถจัดให้มีการใช้งานมาตรฐานและสนับสนุนให้มีการสร้างการใช้งาน write-stream
เพิ่มเติมเพื่อแก้ไขกรณีการใช้งานที่หลากหลาย
ตรวจสอบการใช้งานที่ชุมชนได้ผลิตขึ้นที่นี่
แต่ละฟังก์ชันที่ยอมรับการโทรกลับจะส่งคืนสัญญาหากละเว้นการโทรกลับ ข้อยกเว้นเพียงอย่างเดียวคือตัวสร้าง levelup
ซึ่งหากไม่มีการโทรกลับจะเปิดร้านค้าที่ซ่อนอยู่ในเบื้องหลังอย่างเกียจคร้าน
ตัวอย่าง:
const db = levelup ( leveldown ( './my-db' ) )
await db . put ( 'foo' , 'bar' )
console . log ( await db . get ( 'foo' ) )
levelup
เป็น EventEmitter
และปล่อยเหตุการณ์ต่อไปนี้
เหตุการณ์ | คำอธิบาย | ข้อโต้แย้ง |
---|---|---|
put | คีย์ได้รับการอัปเดตแล้ว | key, value (ใดๆ) |
del | ลบคีย์แล้ว | key (ใด ๆ ) |
batch | แบทช์ได้ดำเนินการแล้ว | operations (อาร์เรย์) |
clear | รายการถูกลบแล้ว | options (วัตถุ) |
opening | ร้านต้นแบบกำลังเปิดอยู่ | - |
open | ร้านเปิดแล้ว | - |
ready | นามแฝงของ open | - |
closing | ร้านกำลังจะปิด | - |
closed | ร้านปิดแล้ว. | - |
error | เกิดข้อผิดพลาด | error (ข้อผิดพลาด) |
ตัวอย่างเช่น คุณสามารถทำได้:
db . on ( 'put' , function ( key , value ) {
console . log ( 'inserted' , { key , value } )
} )
ร้านค้าเช่น LevelDB นั้นปลอดภัยต่อเธรด แต่ ไม่ เหมาะสำหรับการเข้าถึงด้วยหลายกระบวนการ คุณควรเปิดร้านค้าจากกระบวนการ Node.js เดียวเท่านั้น คลัสเตอร์ Node.js ประกอบด้วยหลายกระบวนการ ดังนั้นจึงไม่สามารถแชร์ levelup
ซ์การยกระดับระหว่างกันได้เช่นกัน
ดู Level/awesome
สำหรับโมดูล เช่น multileveldown
ที่อาจช่วยได้หากคุณต้องการให้ร้านค้าแห่งเดียวแชร์ข้ามกระบวนการ
Level/levelup
เป็น โครงการโอเพ่นซอร์สแบบเปิด ซึ่งหมายความว่า:
บุคคลที่มีส่วนร่วมอย่างมีนัยสำคัญและมีคุณค่าจะได้รับสิทธิ์ในการเข้าถึงโครงการเพื่อมีส่วนร่วมตามที่เห็นสมควร โปรเจ็กต์นี้เป็นเหมือนวิกิแบบเปิดมากกว่าโปรเจ็กต์โอเพ่นซอร์สที่มีการป้องกันแบบมาตรฐาน
ดูคู่มือการบริจาคสำหรับรายละเอียดเพิ่มเติม
แพลตฟอร์มการทดสอบข้ามเบราว์เซอร์และโอเพ่นซอร์ส ♥ จัดทำโดย Sauce Labs
สนับสนุนเราด้วยการบริจาครายเดือนบน Open Collective และช่วยให้เราทำงานต่อไปได้
เอ็มไอที