از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
شروع به کار با CamoEdit: کد به روز شده به Camo نسخه 0.12.1 اول از همه، Camo یک ES6 ODM جدید مبتنی بر کلاس برای MongoDB و Node است. با توجه به اینکه جریان اصلی ES6 به سرعت به ما نزدیک میشود، فکر میکردم برای ODM که از ویژگیهای جدید بهره میبرد خیلی دیر شده بودیم، بنابراین Camo را ایجاد کردم. چه آزاردهنده …
سرفصلهای مطلب
ویرایش کنید: کد به روز رسانی به Camo نسخه 0.12.1
معرفی
اول از همه، کامو یک ES6 ODM جدید مبتنی بر کلاس برای MongoDB و Node است. با توجه به اینکه جریان اصلی ES6 به سرعت به ما نزدیک میشود، فکر میکردم برای ODM که از ویژگیهای جدید بهره میبرد خیلی دیر شده بودیم، بنابراین Camo را ایجاد کردم. چیزی که در انتقال از برنامه نویسی جاوا به جاوا اسکریپت بیش از همه مرا آزار می داد، نبود کلاس های سنتی بود. من فکر می کنم مخصوصاً برای مبتدیان، این یک ویژگی مهم برای هر ODM است.
در این آموزش من به شما نشان می دهم که چگونه از ویژگی های اصلی Camo (اعلان طرح، ذخیره، بارگذاری و غیره) استفاده کنید. برای آسانتر کردن مقایسه با Mongoose، نمونههای مشابهی را در مقاله نشان میدهم شروع کار با Mongoose. امیدواریم از اینجا بتوانید تصمیم بگیرید که کدام سبک/کارکرد را برای استفاده در پروژه های خود بهترین دوست دارید.
اتصال Camo به MongoDB
توجه داشته باشید: کد موجود در این مقاله استفاده می کند نسخه 0.12.1 از کامو.
برای اتصال Camo به پایگاه داده خود، فقط رشته اتصال (معمولاً از فرم) را ارسال کنید mongodb://(ip-address)/(db-name)
) به connect()
متد، که نمونه ای از مشتری Camo را برمی گرداند. نمونه مشتری می تواند برای پیکربندی DB استفاده شود، اما برای اعلام، ذخیره یا حذف اسناد شما مورد نیاز نیست.
var connect = require('camo').connect;
var database;
var uri = 'mongodb://localhost/test';
connect(uri).then(function(db) {
database = db;
});
طرحواره ها و مدل ها
مدل ها هستند اعلام کرد با استفاده از کلاس های ES6 و باید گسترش یابد Document
هدف – شی. طرح واره مدل در سازنده اعلام می شود و هر متغیر عضوی که با خط زیر شروع نمی شود (_
) در طرح گنجانده شده و در DB ذخیره می شود. یک متغیر عضو را می توان با اختصاص مستقیم به آن یک نوع یا با اختصاص دادن یک شی با گزینه ها به آن اعلام کرد.
var Document = require('camo').Document;
class Movie extends Document {
constructor() {
super();
this.title = String;
this.rating = {
type: String,
choices: ('G', 'PG', 'PG-13', 'R')
};
this.releaseDate = Date;
this.hasCreditCookie = Boolean;
}
static collectionName() {
return 'movies';
}
}
نام مجموعه با عبور از استاتیک اعلام می شود collectionName()
روش. اگرچه این نام به ندرت در کد مورد نیاز است، اما هنگام بازرسی دستی پایگاه داده MongoDB مفید خواهد بود، بنابراین بهتر است آن را با نام مدل مرتبط نگه دارید.
اگر collectionName()
ارائه نشده است، سپس Camo به طور خودکار یک نام مجموعه را بر اساس اختصاص می دهد روی نام کلاس
ایجاد، بازیابی، به روز رسانی و حذف (CRUD)
برای ایجاد یک نمونه از مدل، فقط از آن استفاده کنید create()
روشی که بسیاری از کارهای نمونه سازی را برای شما انجام می دهد. به صورت اختیاری، داده ها را می توان به create()
که به متغیرهای عضو اختصاص داده می شود. اگر داده برای متغیری ارسال نشود، یا یک مقدار پیشفرض (اگر در طرح مشخص شده باشد) به آن اختصاص داده میشود. null
.
var thor = Movie.create({
title: 'Thor',
rating: 'PG-13',
releaseDate: new Date(2011, 4, 2),
hasCreditCookie: true
});
thor.save().then(function(t) {
console.log(thor);
});
چه زمانی صرفه جویی در به عنوان مثال، داده ها در صورتی که قبلاً ذخیره نشده باشند در پایگاه داده وارد می شوند. اگر نمونه قبلاً در پایگاه داده ذخیره شده باشد، سند موجود با تغییرات به روز می شود.
به حذف یک سند، به سادگی با آن تماس بگیرید delete
روش روی آی تی. شما همچنین می توانید از استاتیک استفاده کنید deleteOne()
، deleteMany()
، یا findOneAndDelete()
روی کلاس مدل تعداد اسناد حذف شده از پایگاه داده در داخل بازگردانده می شود Promise
.
thor.delete().then(function(numDeleted) {
console.log(numDeleted);
});
به بار یک سند از پایگاه داده، بسته به چند انتخاب دارید روی چه کار می خواهید بکنید. گزینه ها عبارتند از:
findOne()
برای بارگیری یک سند واحد (یا اگر سندی وجود نداشته باشد پوچ)
// Load only the 'Thor' movie
Movie.findOne({ title: 'Thor' }).then(function(movie) {
console.log(thor);
});
find()
برای بارگذاری چندین سند (یا یک آرایه خالی در صورت عدم وجود)
// Load all movies that have a credit cookie
Movie.find({ hasCreditCookie: true }).then(function(movies) {
console.log(thor);
});
findOneAndUpdate()
برای بازیابی یک سند و به روز رسانی آن در یک عملیات اتمی
// Update 'Thor' to have a rating of 'R'
Movie.findOneAndUpdate({ title: 'Thor' }, { rating: 'R' }).then(function(movies) {
console.log(thor);
});
موارد اضافی
به لطف پشتیبانی کامو از کلاسهای ES6، ما به راحتی میتوانیم استاتیک، مجازی و متدهایی را برای مدلها تعریف کنیم که باعث میشود کد مدل بسیار منظمتر و خواناتر شود.
var Document = require('camo').Document;
class Movie extends Document {
constructor() {
super();
// Schema declaration here...
}
set releaseYear(year) {
this.releaseDate.setYear(year);
}
get releaseYear() {
return this.releaseDate.getFullYear();
}
yearsOld() {
return new Date().getFullYear() - this.releaseDate.getFullYear();
}
static findAllRMovies() {
return this.find({ rating: 'R' });
}
}
var uri = 'nedb://memory';
connect(uri).then(function(db) {
var thor = Movie.create({
title: 'The Matrix',
rating: 'R',
releaseDate: new Date(1999, 2, 31),
hasCreditCookie: true
});
return thor.save();
}).then(function(t) {
return Movie.findAllRMovies();
}).then(function(movies) {
movies.forEach(function(m) {
console.log(m.title + ': ' + m.releaseDate.getFullYear());
});
});
علاوه بر رابط با MongoDB، کامو نیز پشتیبانی می کند NeDB، که مانند SQLite معادل Mongo است. نمونه ای از استفاده از NeDB در بالا نشان داده شده است. استفاده از آن در طول توسعه و آزمایش بسیار مفید است زیرا داده ها را می توان در یک فایل یا فقط در حافظه ذخیره کرد. این همچنین به این معنی است که می توانید از Camo در کد مرورگر جلویی استفاده کنید!
سر روی به پروژه page برای اطلاعات بیشتر. چیزی که میبینی را دوست داری؟ پروژه را شروع کنید و خبر را منتشر کنید!
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-30 09:53:04