Öğretici: Azure Cosmos DB'de NoSQL hesabı api'sini yönetmek için JavaScript SDK'sını kullanarak Node.js web uygulaması oluşturma
UYGULANANLAR: NoSQL
Geliştirici olarak, NoSQL belge verilerini kullanan uygulamalarınız olabilir. Bu belge verilerini depolamak ve bunlara erişmek için Azure Cosmos DB'de NoSQL hesabı için BIR API kullanabilirsiniz. Bu Node.js öğreticisi, Azure Cosmos DB'de NoSQL hesabı için BIR API'den verileri depolamayı ve bunlara erişmeyi gösterir. Öğreticide, Microsoft Azure Uygulaması Hizmeti'nin Web Apps özelliğinde barındırılan bir Node.js Express uygulaması kullanılır. Bu öğreticide, görevleri oluşturmanıza, almanıza ve tamamlamanıza olanak tanıyan web tabanlı bir uygulama (Todo uygulaması) oluşturacaksınız. Görevler, JSON belgeleri olarak Azure Cosmos DB'de depolanır.
Bu öğreticide, Azure portalını kullanarak Azure Cosmos DB'de NoSQL hesabı için BIR API'nin nasıl oluşturulacağı gösterilmektedir. Kredi kartı veya Azure aboneliği olmadan şunları yapabilirsiniz:
- Ücretsiz bir Azure Cosmos DB hesabı deneyin'i ayarlayın.
- Veritabanı ve kapsayıcı oluşturmak için Node.js SDK'sı üzerinde oluşturulmuş bir web uygulaması derleyin ve çalıştırın.
- Kapsayıcıya öğe ekleyin.
Bu öğreticide JavaScript SDK sürüm 3.0 kullanılır ve aşağıdaki görevler yer alır:
- Azure Cosmos DB hesabı oluşturma
- Yeni bir Node.js uygulaması oluşturma
- Uygulamayı Azure Cosmos DB’ye bağlama
- Uygulamayı Azure'da çalıştırma ve dağıtma
Önkoşullar
Bu makaledeki yönergeleri izlemeden önce aşağıdaki kaynaklara sahip olduğunuzdan emin olun:
Azure aboneliği, kredi kartı veya Azure aboneliği olmadan ücretsiz bir Azure Cosmos DB'yi deneyin hesabı ayarlayabilirsiniz.
Azure Cosmos DB'yi ücretsiz olarak, Azure aboneliği olmadan ve hiçbir taahhüt gerektirmeden deneyebilirsiniz. Alternatif olarak, ilk 1000 RU/sn ve 25 GB depolama alanı ücretsiz olarak bir Azure Cosmos DB ücretsiz katmanı hesabı oluşturabilirsiniz. Azure Cosmos DB öykünücüsünün URI'sini
https://localhost:8081
de kullanabilirsiniz. Öykünücü ile kullanılacak anahtar için bkz . İsteklerin kimliğini doğrulama.Node.js sürüm 6.10 veya üzeri.
Express oluşturucu (Express'i
npm install express-generator -g
aracılığıyla yükleyebilirsiniz)Git'i yerel iş istasyonunuza yükleyin.
Azure Cosmos DB hesabı oluşturma
Bir Azure Cosmos DB hesabı oluşturarak başlayın. Zaten bir hesabınız varsa veya bu öğretici için Azure Cosmos DB Öykünücüsü kullanıyorsanız Yeni Node.js uygulaması oluşturma bölümüne atlayabilirsiniz.
Azure portalı menüsünde veya Giriş sayfasında Kaynak oluştur'u seçin.
Azure Cosmos DB için arama. Azure Cosmos DB Oluştur'u>seçin.
Azure Cosmos DB hesabı oluştur sayfasında, NoSQL için Azure Cosmos DB bölümünde Oluştur seçeneğini belirleyin.
Azure Cosmos DB çeşitli API'ler sağlar:
- Belge verileri için NoSQL
- PostgreSQL
- MongoDB, belge verileri için
- Apache Cassandra
- Tablo
- Grafik verileri için Apache Gremlin
NoSQL API'si hakkında daha fazla bilgi edinmek için bkz . Azure Cosmos DB'ye Hoş Geldiniz.
Azure Cosmos DB Hesabı Oluştur sayfasında yeni Azure Cosmos DB hesabının temel ayarlarını girin.
Ayar Value Açıklama Abonelik Abonelik adı Bu Azure Cosmos DB hesabı için kullanmak istediğiniz Azure aboneliğini seçin. Kaynak Grubu Kaynak grubu adı Bir kaynak grubu seçin veya Yeni oluştur seçeneğini belirleyin ve yeni kaynak grubu için benzersiz bir ad girin. Hesap Adı Benzersiz Ad Azure Cosmos DB hesabınızı tanımlamak için bir ad girin. URI’nizi oluşturmak için sağladığınız ada documents.azure.com ekleneceği için benzersiz bir ad kullanın. Ad yalnızca küçük harf, sayı ve kısa çizgi (-) karakterini içerebilir. 3-44 karakter uzunluğunda olmalıdır. Konum Kullanıcılarınıza en yakın bölge Azure Cosmos DB hesabınızın barındırılacağı coğrafi konumu seçin. Verilere en hızlı erişimi sağlamak için kullanıcılarınıza en yakın olan konumu kullanın. Kapasite modu Sağlanan aktarım hızı veya Sunucusuz Sağlanan aktarım hızı modunda hesap oluşturmak için Sağlanan aktarım hızı'na tıklayın. Sunucusuz modda hesap oluşturmak için Sunucusuz'u seçin. Azure Cosmos DB ücretsiz katman indirimi uygulama Uygula veya Uygulama Azure Cosmos DB ücretsiz katmanı ile bir hesapta ilk 1000 RU/sn ve 25 GB depolama alanı ücretsiz olarak elde edersiniz. Ücretsiz katman hakkında daha fazla bilgi edinin. Toplam hesap aktarım hızını sınırla Seçili veya değil Bu hesapta sağlanacak toplam aktarım hızı miktarını sınırlayın. Bu sınır, sağlanan aktarım hızıyla ilgili beklenmeyen ücretleri engeller. Hesabınız oluşturulduktan sonra bu sınırı güncelleştirebilir veya kaldırabilirsiniz. Azure aboneliği başına en fazla bir ücretsiz katman Azure Cosmos DB hesabınız olabilir ve hesabı oluştururken bunu kabul etmeniz gerekir. Ücretsiz katman indirimini uygulama seçeneğini görmüyorsanız abonelikteki başka bir hesap ücretsiz katmanla zaten etkinleştirilmiştir.
Not
Kapasite modu olarak Sunucusuz seçeneğini belirlediğinizde aşağıdaki seçenekler kullanılamaz:
- Ücretsiz Katman İndirimi Uygula
- Toplam hesap aktarım hızını sınırla
Genel Dağıtım sekmesinde aşağıdaki ayrıntıları yapılandırın. Bu hızlı başlangıç için varsayılan değerleri bırakabilirsiniz:
Ayar Value Açıklama Coğrafi Yedeklilik Devre Dışı Bırak Bölgenizi bir çift bölgeyle eşleştirerek hesabınızda genel dağıtımı etkinleştirin veya devre dışı bırakın. Daha sonra hesabınıza daha fazla bölge ekleyebilirsiniz. Birden Çok Bölgeli Yazmalar Devre Dışı Bırak Çok bölgeli yazma özelliği, dünya genelindeki veritabanlarınız ve kapsayıcılarınız için sağlanan aktarım hızını kullanmanıza olanak tanır. Kullanılabilirlik Alanları Devre Dışı Bırak Kullanılabilirlik Alanları uygulamanızın kullanılabilirliğini ve dayanıklılığını daha da geliştirmenize yardımcı olur. Not
Önceki Temel Bilgiler sayfasında Kapasite modu olarak Sunucusuz seçeneğini belirlediğinizde aşağıdaki seçenekler kullanılamaz:
- Coğrafi yedeklilik
- Birden Çok Bölgeli Yazmalar
İsteğe bağlı olarak, aşağıdaki sekmelerde daha fazla ayrıntı yapılandırabilirsiniz:
- Ağ iletişimi. Sanal ağdan erişimi yapılandırma.
- Yedekleme İlkesi. Düzenli veya sürekli yedekleme ilkesini yapılandırın.
- Şifreleme. Hizmet tarafından yönetilen anahtarı veya müşteri tarafından yönetilen anahtarı kullanın.
- Etiketler' e tıklayın. Etiketler, birden fazla kaynağa ve kaynak grubuna aynı etiketi uygulayarak kaynakları kategorilere ayırmanızı, birleşik faturaları görüntülemenizi sağlayan ad/değer çiftleridir.
Gözden geçir ve oluştur’u seçin.
Hesap ayarlarını gözden geçirip Oluştur seçeneğini belirleyin. Hesabın oluşturulması birkaç dakika sürer. Portal sayfasında Dağıtımınız tamamlandı iletisinin görüntülenmesini bekleyin.
Azure Cosmos DB hesabı sayfasına gitmek için Kaynağa git seçeneğini belirleyin.
Azure Cosmos DB hesabı sayfasına gidin ve Anahtarlar'ı seçin. Daha sonra oluşturduğunuz web uygulamasında kullanmak üzere değerleri kopyalayın.
Yeni bir Node.js uygulaması oluşturma
Şimdi Express çerçevesini kullanarak temel bir Merhaba Dünya Node.js projesi oluşturmayı öğrenin.
Node.js komut istemi gibi istediğiniz bir terminal uygulamasını açın.
Yeni uygulamanın depolanmasını istediğiniz dizine gidin.
Express oluşturucuyu kullanarak todo adlı yeni bir uygulama oluşturun.
express todo
todo dizinini açın ve bağımlılıkları yükleyin.
cd todo npm install
Yeni uygulamayı çalıştırın.
npm start
Yeni uygulamanızı tarayıcıda görüntülemek için adresine
http://localhost:3000
gidin.Terminal penceresinde CTRL+C tuşlarını kullanarak uygulamayı durdurun ve toplu işi sonlandırmak için y'yi seçin.
Gerekli modülleri yükleme
Package.json dosyası, projenin kökünde oluşturulan dosyalardan biridir. Bu dosya, Node.js uygulamanız için gerekli olan diğer modüllerin listesini içerir. Bu uygulamayı Azure'a dağıttığınızda uygulamanızı desteklemek amacıyla Azure'a hangi modüllerin yüklenmesi gerektiğini belirlemek için bu dosya kullanılır. Bu öğretici için iki paket daha yükleyeceksiniz.
npm aracılığıyla @azure/cosmos modülünü yükleyin.
npm install @azure/cosmos
Node.js uygulamasını Azure Cosmos DB'ye bağlama
İlk kurulumu ve yapılandırmayı tamamladıktan sonra, yapılacaklar uygulamasının Azure Cosmos DB ile iletişim kurmak için gerektirdiği kodu yazmayı öğrenin.
Modeli oluşturma
Proje dizininizin kökünde models adlı yeni bir dizin oluşturun.
models dizininde taskDao.js adında yeni bir dosya oluşturun. Bu dosya, veritabanını ve kapsayıcıyı oluşturmak için gereken kodu içerir. Ayrıca Azure Cosmos DB'deki görevleri okuma, güncelleştirme, oluşturma ve bulma yöntemlerini de tanımlar.
Aşağıdaki kodu taskDao.js dosyasına kopyalayın:
// @ts-check const CosmosClient = require('@azure/cosmos').CosmosClient const debug = require('debug')('todo:taskDao') // For simplicity we'll set a constant partition key const partitionKey = undefined class TaskDao { /** * Manages reading, adding, and updating Tasks in Azure Cosmos DB * @param {CosmosClient} cosmosClient * @param {string} databaseId * @param {string} containerId */ constructor(cosmosClient, databaseId, containerId) { this.client = cosmosClient this.databaseId = databaseId this.collectionId = containerId this.database = null this.container = null } async init() { debug('Setting up the database...') const dbResponse = await this.client.databases.createIfNotExists({ id: this.databaseId }) this.database = dbResponse.database debug('Setting up the database...done!') debug('Setting up the container...') const coResponse = await this.database.containers.createIfNotExists({ id: this.collectionId }) this.container = coResponse.container debug('Setting up the container...done!') } async find(querySpec) { debug('Querying for items from the database') if (!this.container) { throw new Error('Collection is not initialized.') } const { resources } = await this.container.items.query(querySpec).fetchAll() return resources } async addItem(item) { debug('Adding an item to the database') item.date = Date.now() item.completed = false const { resource: doc } = await this.container.items.create(item) return doc } async updateItem(itemId) { debug('Update an item in the database') const doc = await this.getItem(itemId) doc.completed = true const { resource: replaced } = await this.container .item(itemId, partitionKey) .replace(doc) return replaced } async getItem(itemId) { debug('Getting an item from the database') const { resource } = await this.container.item(itemId, partitionKey).read() return resource } } module.exports = TaskDao
taskDao.js dosyasını kaydedin ve kapatın.
Denetleyiciyi oluşturma
Projenizin routes dizininde tasklist.js adlı yeni bir dosya oluşturun.
Aşağıdaki kodu tasklist.js'ye ekleyin. Bu kod, tasklist.js tarafından kullanılan CosmosClient ve async modüllerini yükler. Bu kod, daha önce tanımladığımız TaskDao nesnesinin bir örneği olarak geçirilmiş TaskList sınıfını da tanımlar:
const TaskDao = require("../models/TaskDao"); class TaskList { /** * Handles the various APIs for displaying and managing tasks * @param {TaskDao} taskDao */ constructor(taskDao) { this.taskDao = taskDao; } async showTasks(req, res) { const querySpec = { query: "SELECT * FROM root r WHERE r.completed=@completed", parameters: [ { name: "@completed", value: false } ] }; const items = await this.taskDao.find(querySpec); res.render("index", { title: "My ToDo List ", tasks: items }); } async addTask(req, res) { const item = req.body; await this.taskDao.addItem(item); res.redirect("/"); } async completeTask(req, res) { const completedTasks = Object.keys(req.body); const tasks = []; completedTasks.forEach(task => { tasks.push(this.taskDao.updateItem(task)); }); await Promise.all(tasks); res.redirect("/"); } } module.exports = TaskList;
tasklist.js dosyasını kaydedin ve kapatın.
Config.js ekleme
Projenizin kök dizininde config.js adlı yeni bir dosya oluşturun.
config.js dosyasına aşağıdaki kodu ekleyin. Bu kod, uygulamamız için gereken yapılandırma ayarlarını ve değerlerini tanımlar.
const config = {}; config.host = process.env.HOST || "[the endpoint URI of your Azure Cosmos DB account]"; config.authKey = process.env.AUTH_KEY || "[the PRIMARY KEY value of your Azure Cosmos DB account"; config.databaseId = "ToDoList"; config.containerId = "Items"; if (config.host.includes("https://localhost:")) { console.log("Local environment detected"); console.log("WARNING: Disabled checking of self-signed certs. Do not have this code in production."); process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; console.log(`Go to http://localhost:${process.env.PORT || '3000'} to try the sample.`); } module.exports = config;
config.js dosyasında, Azure portalındaki Azure Cosmos DB hesabınızın Anahtarlar sayfasında bulunan değerleri kullanarak HOST ve AUTH_KEY değerlerini güncelleştirin.
config.js dosyasını kaydedin ve kapatın.
App.js'yi değiştirme
Proje dizininde app.js dosyasını açın. Bu dosya daha önce Express web uygulaması oluşturulduğu zaman oluşturulmuştur.
app.js dosyasına aşağıdaki kodu ekleyin. Bu kod, kullanılacak yapılandırma dosyasını tanımlar ve değerleri sonraki bölümlerde kullanacağınız bazı değişkenlere yükler.
const CosmosClient = require('@azure/cosmos').CosmosClient const config = require('./config') const TaskList = require('./routes/tasklist') const TaskDao = require('./models/taskDao') const express = require('express') const path = require('path') const logger = require('morgan') const cookieParser = require('cookie-parser') const bodyParser = require('body-parser') const app = express() // view engine setup app.set('views', path.join(__dirname, 'views')) app.set('view engine', 'jade') // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')) app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: false })) app.use(cookieParser()) app.use(express.static(path.join(__dirname, 'public'))) //Todo App: const cosmosClient = new CosmosClient({ endpoint: config.host, key: config.authKey }) const taskDao = new TaskDao(cosmosClient, config.databaseId, config.containerId) const taskList = new TaskList(taskDao) taskDao .init(err => { console.error(err) }) .catch(err => { console.error(err) console.error( 'Shutting down because there was an error settinig up the database.' ) process.exit(1) }) app.get('/', (req, res, next) => taskList.showTasks(req, res).catch(next)) app.post('/addtask', (req, res, next) => taskList.addTask(req, res).catch(next)) app.post('/completetask', (req, res, next) => taskList.completeTask(req, res).catch(next) ) app.set('view engine', 'jade') // catch 404 and forward to error handler app.use(function(req, res, next) { const err = new Error('Not Found') err.status = 404 next(err) }) // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message res.locals.error = req.app.get('env') === 'development' ? err : {} // render the error page res.status(err.status || 500) res.render('error') }) module.exports = app
Son olarak, app.js dosyasını kaydedip kapatın.
Kullanıcı arabirimi oluşturma
Şimdi bir kullanıcının uygulamayla etkileşim kurabilmesi için kullanıcı arabirimini oluşturun. Önceki bölümlerde oluşturduğunuz Express uygulaması, görünüm altyapısı olarak Jade kullanır.
views dizinindeki layout.jade dosyası diğer .jade dosyaları için genel bir şablon olarak kullanılır. Bu adımda, web sitesi tasarlamak için kullanılan bir araç seti olan Bootstrap'ı kullanacak şekilde değiştirirsiniz.
views klasöründe bulunan layout.jade dosyasını açın ve içeriğini aşağıdaki kodla değiştirin:
doctype html html head title= title link(rel='stylesheet', href='//ajax.aspnetcdn.com/ajax/bootstrap/3.3.2/css/bootstrap.min.css') link(rel='stylesheet', href='/stylesheets/style.css') body nav.navbar.navbar-inverse.navbar-fixed-top div.navbar-header a.navbar-brand(href='#') My Tasks block content script(src='//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.2.min.js') script(src='//ajax.aspnetcdn.com/ajax/bootstrap/3.3.2/bootstrap.min.js')
Bu kod, Jade altyapısına uygulama için bazı HTML'leri işlemesini söyler ve içerik sayfaları için düzeni sağlayabildiğiniz içerik adlı bir blok oluşturur. layout.jade dosyasını kaydedin ve kapatın.
Uygulama tarafından kullanılan index.jade dosyasını açın. Dosyanın içeriğini aşağıdaki kodla değiştirin:
extends layout block content h1 #{title} br form(action="/completetask", method="post") table.table.table-striped.table-bordered tr td Name td Category td Date td Complete if (typeof tasks === "undefined") tr td else each task in tasks tr td #{task.name} td #{task.category} - var date = new Date(task.date); - var day = date.getDate(); - var month = date.getMonth() + 1; - var year = date.getFullYear(); td #{month + "/" + day + "/" + year} td if(task.completed) input(type="checkbox", name="#{task.id}", value="#{!task.completed}", checked=task.completed) else input(type="checkbox", name="#{task.id}", value="#{!task.completed}", checked=task.completed) button.btn.btn-primary(type="submit") Update tasks hr form.well(action="/addtask", method="post") label Item Name: input(name="name", type="textbox") label Item Category: input(name="category", type="textbox") br button.btn(type="submit") Add item
Bu kod düzeni genişletir ve layout.jade dosyasında gördüğünüz içerik yer tutucusu için içerik sağlar. Bu düzende iki HTML formu oluşturdunuz.
İlk form, verileriniz için bir tablo ve denetleyicinin /completeTask yöntemine göndererek öğeleri güncelleştirmenizi sağlayan bir düğme içerir.
İkinci form, iki giriş alanı ve denetleyicinin /addtask yöntemine göndererek yeni bir öğe oluşturmanıza olanak tanıyan bir düğme içerir. Bu, uygulamanın çalışması için tek ihtiyacınız olan yöntemdir.
Uygulamanızı yerel olarak çalıştırma
Uygulamayı derledikten sonra aşağıdaki adımları kullanarak yerel olarak çalıştırabilirsiniz:
Uygulamayı yerel makinenizde test etmek için terminalde komutunu çalıştırarak
npm start
uygulamanızı başlatın ve sayfayı yenileyinhttp://localhost:3000
. Sayfa artık aşağıdaki ekran görüntüsü gibi görünmelidir:İpucu
layout.jade dosyasındaki girinti veya index.jade dosyasıyla ilgili bir hata alırsanız, her iki dosyadaki ilk iki satırın boşluk olmadan sola yaslandığından emin olun. İlk iki satırdan önce boşluklar varsa, bunları kaldırın, her iki dosyayı da kaydedin ve tarayıcı pencerenizi yenileyin.
Yeni bir görev girmek için Öğe Adı ve Öğe Kategorisi alanlarını kullanın ve ardından Öğe Ekle'yi seçerek Azure Cosmos DB'de bu özelliklere sahip bir belge oluşturun.
Sayfa, yeni oluşturulan öğeyi ToDo listesinde görüntüleyecek şekilde güncelleştirilir.
Görevi tamamlamak için, Tamamla sütunundaki onay kutusunu seçin ve ardından Görevleri güncelleştir'i seçerek önceden oluşturduğunuz belgeyi güncelleştirin ve görünümden kaldırın.
Uygulamayı durdurmak için terminal penceresinde CTRL+C tuşlarına basın ve ardından toplu işi sonlandırmak için y'yi seçin.
Uygulamanızı App Service'e dağıtma
Uygulamanız yerel olarak başarılı olduktan sonra Azure Uygulaması Hizmeti'ne dağıtabilirsiniz. Terminalde todo uygulama dizininde olduğunuzdan emin olun. Aşağıdaki az webapp up komutunu kullanarak kodu yerel klasörünüzde (todo) dağıtın:
az webapp up --sku F1 --name <app-name>
app_name> tüm Azure'da benzersiz bir adla değiştirin <(geçerli karakterler a-z, 0-9 ve -'dır). İyi bir desen, şirketinizin adıyla uygulama tanımlayıcısının bir birleşimini kullanmaktır. Uygulama dağıtımı hakkında daha fazla bilgi edinmek için bkz . Azure'da uygulama dağıtımı Node.js.
Komutun tamamlanması birkaç dakika sürebilir. komutu kaynak grubunu, App Service planını ve uygulama kaynağını oluşturma, günlüğe kaydetmeyi yapılandırma ve ZIP dağıtımı yapma hakkında iletiler sağlar. komutu çalışırken bu iletileri sağlar. Ardından, uygulamanın Azure'daki URL'si http://<app-name>.azurewebsites.net
olan konumunda uygulamayı başlatmanız için bir URL verir.
Kaynakları temizleme
Bu kaynaklar artık gerekli olmadığında kaynak grubunu, Azure Cosmos DB hesabını ve tüm ilgili kaynakları silebilirsiniz. Bunu yapmak için Azure Cosmos DB hesabı için kullandığınız kaynak grubunu seçin, Sil'i seçin ve silinecek kaynak grubunun adını onaylayın.
Sonraki adımlar
Kapasite planlaması için mevcut veritabanı kümeniz hakkındaki bilgileri kullanabilirsiniz.