از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
خواندن و نوشتن YAML در یک فایل در Node.js/JavaScript در چند سال اخیر YAML که مخفف YAML Ain’t Markup Language است، برای استفاده در ذخیره سازی داده ها به صورت سریالی، معمولاً فایل های پیکربندی، بسیار محبوب شده است. از آنجایی که YAML اساسا یک قالب داده است، مشخصات YAML نسبتاً مختصر است. بنابراین، تنها قابلیت مورد نیاز کتابخانه های YAML…
سرفصلهای مطلب
معرفی
در چند سال اخیر YAML که مخفف آن است YAML زبان نشانه گذاری نیست، برای استفاده در ذخیره سازی داده ها به صورت سریالی، معمولاً فایل های پیکربندی، بسیار محبوب شده است. از آنجایی که YAML اساسا یک قالب داده است، مشخصات YAML نسبتاً مختصر است. بنابراین، تنها قابلیت مورد نیاز کتابخانههای YAML، توانایی تجزیه یا تولید فایلهای با فرمت YAML است.
در این مقاله می خواهیم ببینیم که چگونه می توانید از آن استفاده کنید YAML با یک برنامه Node.js. ما با مشاهده روش ذخیره داده ها در یک فایل YAML شروع می کنیم و سپس آن داده ها را در یک شی جاوا اسکریپت بارگذاری می کنیم. در نهایت، ما یاد خواهیم گرفت که چگونه یک شی جاوا اسکریپت را در یک فایل YAML ذخیره کنیم.
چند کتابخانه Node محبوب برای تجزیه و تولید YAML استفاده می شود: YAML و js-yaml. js-yaml
محبوبتر از این دو کتابخانه است، بنابراین این چیزی است که ما تمرکز میکنیم روی برای این مقاله
قبل از اینکه جلوتر برویم، چند پیش نیاز برای این آموزش وجود دارد. شما باید درک اولیه ای از نحو جاوا اسکریپت، به ویژه برای زمان اجرا Node.js داشته باشید. همچنین باید Node.js و NPM را نصب کنید روی سیستم شما را دنبال کنید. به غیر از آن، آموزش برای مبتدیان بسیار ساده و آسان است.
نصب و راه اندازی
مانند هر بسته Node، نصب با استفاده از NPM بسیار ساده است:
$ npm install js-yaml
فقط مطمئن شوید که از پرچم های صحیح برای ذخیره وابستگی در خود استفاده کنید package.json
فایل. به عنوان مثال، اگر js-yaml
فقط برای اهداف توسعه استفاده می شود، سپس استفاده کنید --save-dev
، در غیر این صورت استفاده کنید --save
اگر در محیط تولید برنامه شما استفاده شده باشد.
با باز کردن REPL از همان دایرکتوری و وارد کردن بسته با موارد زیر می توانید تأیید کنید که به درستی نصب شده است:
$ node
> const yaml = require('js-yaml')
>
این js-yaml
کتابخانه همچنین از استفاده از CLI پشتیبانی می کند که به شما امکان می دهد فایل های YAML را از خط فرمان بازرسی کنید. شما می توانید این را با نصب بسته به صورت سراسری فعال کنید:
$ npm install -g js-yaml
خواندن فایل های YAML در Node.js
ما با خواندن یک فایل با فرمت YAML و تجزیه آن به یک شی JS شروع می کنیم. به خاطر این آموزش، فرض کنید یک فایل داریم، data.yaml
، که دارای مطالب زیر است:
--- # Article data
article:
title: "Reading and Writing YAML to a File in Node.js/JavaScript"
url_path: "/reading-and-writing-yaml-to-a-file-in-node-js-javascript"
domain: "rasanegar.com"
port: 443
is-https: true
meta:
published-at: "Nov. 1st, 2019"
author:
name: "Scott Robinson"
contact: "(email protected)"
tags:
- javascript
- node.js
- web development
برای خواندن و تجزیه این فایل، از این استفاده خواهیم کرد .safeLoad()
روش:
// read.js
const fs = require('fs');
const yaml = require('js-yaml');
try {
let fileContents = fs.readFileSync('./data.yaml', 'utf8');
let data = yaml.safeLoad(fileContents);
console.log(data);
} catch (e) {
console.log(e);
}
با اجرای این کد، خروجی زیر خواهد بود:
$ node read.js
{ title: 'Reading and Writing YAML to a File in Node.js/JavaScript',
'url path': '/reading-and-writing-yaml-to-a-file-in-node-js-javascript',
domain: 'rasanegar.com',
port: 443,
'is-https': true,
meta:
{ 'published-at': 'Nov. 1st, 2019',
author: { name: 'Scott Robinson', contact: '(email protected)' },
tags: ( 'javascript', 'node.js', 'web development' ) } }
می بینید که داده های فایل YAML اکنون به JS literals و اشیا در همان ساختار فایل تبدیل شده اند.
این .safeLoad()
روش برای تجزیه محتوای YAML توصیه می شود زیرا برای داده های نامعتبر ایمن است. یک محدودیت شایان ذکر این است که این روش از منابع چند سندی پشتیبانی نمی کند. اگر با YAML آشنایی دارید، میدانید که YAML میتواند حاوی چندین «سند» در یک فایل واحد باشد که با ---
نحو. مثلا:
--- # Programming language
language: "JavaScript"
created-at: "December 4, 1995"
domain: "rasanegar.com"
creator: "Brendan Eich"
--- # Website
domain: "wikipedia.org"
created-at: "January 15, 2001"
num-languages: 304
num-articles: 51360771
creator:
- Jimmy Wales
- Larry Sanger
در حال بارگذاری این فایل با .safeLoad()
استثنا خواهد کرد. در عوض، باید از .safeLoadAll()
روش، مانند:
// read-all.js
const fs = require('fs');
const yaml = require('js-yaml');
try {
let fileContents = fs.readFileSync('./data-multi.yaml', 'utf8');
let data = yaml.safeLoadAll(fileContents);
console.log(data);
} catch (e) {
console.log(e);
}
این منجر به آرایه ای از اسناد YAML تجزیه شده می شود:
$ node read-all.js
( { language: 'JavaScript',
'created-at': 'December 4, 1995',
domain: 'rasanegar.com',
creator: 'Brendan Eich' },
{ domain: 'wikipedia.org',
'created-at': 'January 15, 2001',
'num-languages': 304,
'num-articles': 51360771,
creator: ( 'Jimmy Wales', 'Larry Sanger' ) } )
یکی دیگر از روش های قابل ذکر است .load()
روشی که بسیار شبیه به .safeLoad()
، با این تفاوت که پشتیبانی می کند همه انواع طرحواره YAML. انواع اضافی پشتیبانی شده مختص جاوا اسکریپت هستند (!!js/undefined
، !!js/regexp
، و !!js/function
) و باید کاملاً به داده های این فایل های YAML اعتماد کنید زیرا می تواند کدهای نامعتبر را بارگیری کند.
به عنوان مثال، یک تابع را می توان در YAML مانند زیر تعریف کرد:
'toString': !<tag:yaml.org,2002:js/function> function() {console.log('Malicious code executed!');}
آن تگ به کتابخانه YAML ما می گوید که آن را به عنوان یک تابع تجزیه کند، که بعداً می تواند اجرا شود. همانطور که در مستندات اشاره شد، یکی از روش های رایج است که اجرا می شود روی اشیاء JS است toString
، که می توانیم از آن به صورت زیر استفاده کنیم:
// unsafe.js
const yaml = require('js-yaml');
let yamlStr = "'toString': !<tag:yaml.org,2002:js/function> function() {console.log('Malicious code executed!');}";
let loadedYaml = yaml.load(yamlStr) + '';
console.log(loadedYaml);
و اجرای این کد نشان می دهد که console.log
متد در واقع اجرا می شود:
$ node unsafe.js
Malicious code executed!
undefined
نوشتن YAML روی فایل ها در Node.js
اکنون که می دانید چگونه فایل های YAML را با Node.js بخوانید، بیایید ببینیم چگونه می توانیم اشیاء/داده های جاوا اسکریپت را در یک فایل YAML بنویسیم.
برای این مثال، ما از شیء JS زیر استفاده خواهیم کرد، که ممکن است از نمونه های قبلی تشخیص دهید:
let data = {
title: 'Reading and Writing YAML to a File in Node.js/JavaScript',
'url path': '/reading-and-writing-yaml-to-a-file-in-node-js-javascript',
domain: 'rasanegar.com',
port: 443,
'is-https': true,
meta: {
'published-at': 'Nov. 1st, 2019',
author: {
name: 'Scott Robinson',
contact: '(email protected)'
},
tags: (
'javascript', 'node.js', 'web development'
)
}
};
به منظور سریال سازی این شی و ذخیره آن در یک فایل با فرمت YAML، از آن استفاده می کنیم .safeDump()
روش، که دوباره استفاده می کند js-yaml
‘s DEFAULT_SAFE_SCHEMA
:
// write.js
const fs = require('fs');
const yaml = require('js-yaml');
let data = { /* Same as above */};
let yamlStr = yaml.safeDump(data);
fs.writeFileSync('data-out.yaml', yamlStr, 'utf8');
با اجرای این کد یک فایل YAML به شکل زیر نوشته می شود:
title: Reading and Writing YAML to a File in Node.js/JavaScript
url path: /reading-and-writing-yaml-to-a-file-in-node-js-javascript
domain: rasanegar.com
port: 443
is-https: true
meta:
published-at: 'Nov. 1st, 2019'
author:
name: Scott Robinson
contact: (email protected)
tags:
- javascript
- node.js
- web development
این خروجی تقریباً مشابه YAML اصلی است که قبلاً در مقاله خواندیم، با این تفاوت که جداکننده سند (---
) شامل نمی شود.
انواع داده ها
مهم است که به خاطر داشته باشید که همه انواع داده های جاوا اسکریپت را نمی توان مستقیماً به YAML سریال کرد و بالعکس. در برخی موارد، اگر مستقیماً پشتیبانی نشود، در صورت امکان از نزدیکترین نوع داده استفاده می شود. به عنوان مثال، یک YAML !!seq
نوع به عنوان یک آرایه جاوا اسکریپت تجزیه خواهد شد.
بر اساس مستندات js-yaml، انواع داده های زیر پشتیبانی می شوند:
نوع YAML | مثال | نوع JS |
---|---|---|
!!خالی |
''
|
خالی |
!!بول |
true
|
بوول |
!!int |
3
|
عدد |
!!شناور |
3.1415
|
عدد |
!!دودویی |
c3RhY2thYnVzZS5jb20=
|
بافر |
!!مهر زمانی |
'2013-08-15'
|
تاریخ |
نقشه !! |
( ... )
|
آرایه ای از جفت های کلید-مقدار |
!!جفت |
( ... )
|
آرایه یا جفت آرایه |
!!تنظیم |
{ ... }
|
آرایه ای از اشیا با کلیدهای داده شده و مقادیر تهی |
خ !! |
'...'
|
رشته |
!! دنباله |
( ... )
|
آرایه |
!!نقشه |
{ ... }
|
هدف – شی |
همانطور که قبلا ذکر شد، سایر انواع خاص JS نیز می توانند پشتیبانی شوند، اما تنها در صورتی که از روش های “ایمن” استفاده نکنید.
نتیجه
YAML یک فرمت به طور فزاینده ای محبوب است که برای ساختار داده ها برای برنامه ها، معمولاً به عنوان فایل های پیکربندی، اما همچنین به عنوان جایگزینی برای هر چیزی که JSON برای آن استفاده می شود، استفاده می شود. به دلیل انعطاف پذیری بالا و سینتکس خوانا آسان، به سرعت در بسیاری از پروژه ها جایگزین JSON می شود، اگرچه هر دو هنوز جای خود را دارند.
در این مقاله نشان دادیم که چگونه می توانید از آن استفاده کنید js-yaml
کتابخانه ای برای تجزیه فایل های YAML به اشیاء جاوا اسکریپت در Node.js و روش سریال سازی اشیاء جاوا اسکریپت به فایل YAML. ما همچنین نشان دادیم که چه نوع JS برای انواع داده های YAML استفاده می شود. برای جزئیات بیشتر روی این کتابخانه را بررسی کنید اسناد رسمی.
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-24 04:24:03