ExpressJS - Veritabanı

İstekleri almaya devam ediyoruz, ancak sonunda onları hiçbir yerde depolamıyoruz. Verileri depolamak için bir Veritabanına ihtiyacımız var. Bunun için, adlı NoSQL veritabanını kullanacağız.MongoDB.

Mongo'yu kurmak ve hakkında okumak için bu bağlantıyı takip edin .

Mongo'yu Express ile kullanmak için node için bir istemci API'ye ihtiyacımız var. Bizim için birden fazla seçenek var, ancak bu eğitim için firavun faresine bağlı kalacağız . Firavun faresi için kullanılırdocument ModelingMongoDB için Düğümde. Belge modelleme için birModel (bir class belge odaklı programlamada) ve ardından documents bu Modeli kullanarak (oluşturduğumuz gibi documents of a classOOP'de). Tüm işlemlerimiz bu "belgeler" üzerinde yapılacak, ardından son olarak bu belgeleri veri tabanımıza yazacağız.

Mongoose'u Kurmak

Artık Mongo'yu kurduğunuza göre, Mongoose'u kurmamıza izin verin, diğer düğüm paketlerimizi kurduğumuz gibi -

npm install --save mongoose

Firavun faresini kullanmaya başlamadan önce Mongo kabuğunu kullanarak bir veritabanı oluşturmalıyız. Yeni bir veritabanı oluşturmak için terminalinizi açın ve "mongo" girin. Bir Mongo kabuğu başlayacak, aşağıdaki kodu girin -

use my_db

Sizin için yeni bir veritabanı oluşturulacak. Mongo kabuğunu her açtığınızda, varsayılan olarak db "test" yapacak ve yukarıdakiyle aynı komutu kullanarak veritabanınıza geçmeniz gerekecektir.

Mongoose'u kullanmak için, bizim index.js dosyaya bağlanın ve ardından mongodb çalışan hizmet mongodb://localhost.

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

Artık uygulamamız veritabanımıza bağlı, yeni bir Model oluşturalım. Bu model, veritabanımızda bir koleksiyon görevi görecek. Yeni bir Model oluşturmak için herhangi bir rota tanımlamadan önce aşağıdaki kodu kullanın -

var personSchema = mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});
var Person = mongoose.model("Person", personSchema);

Yukarıdaki kod, bir kişi için şemayı tanımlar ve bir Mongoose Modu oluşturmak için kullanılır. Person.

Belgeleri Kaydetme

Şimdi yeni bir html formu oluşturacağız; bu form, bir kişinin ayrıntılarını almanıza ve veri tabanımıza kaydetmenize yardımcı olacaktır. Formu oluşturmak için adlı yeni bir görünüm dosyası oluşturun.person.pug aşağıdaki içeriğe sahip görünümler dizininde -

html
head
   title Person
   body
      form(action = "/person", method = "POST")
      div
         label(for = "name") Name: 
         input(name = "name")
      br
      div
         label(for = "age") Age: 
         input(name = "age")
      br
      div
         label(for = "nationality") Nationality: 
         input(name = "nationality")
      br
      button(type = "submit") Create new person

Ayrıca bir new get route içinde index.js bu belgeyi işlemek için -

app.get('/person', function(req, res){
   res.render('person');
});

Git "localhost:3000/person"formun doğru çıktıyı görüntüleyip görüntülemediğini kontrol etmek için. Bunun yalnızca kullanıcı arayüzü olduğunu, henüz çalışmadığını unutmayın. Aşağıdaki ekran görüntüsü, formun nasıl görüntülendiğini gösterir -

Şimdi adresinde bir yol sonrası işleyici tanımlayacağız '/person' bu talebi hangi ele alacak

app.post('/person', function(req, res){
   var personInfo = req.body; //Get the parsed information
   
   if(!personInfo.name || !personInfo.age || !personInfo.nationality){
      res.render('show_message', {
         message: "Sorry, you provided worng info", type: "error"});
   } else {
      var newPerson = new Person({
         name: personInfo.name,
         age: personInfo.age,
         nationality: personInfo.nationality
      });
		
      newPerson.save(function(err, Person){
         if(err)
            res.render('show_message', {message: "Database error", type: "error"});
         else
            res.render('show_message', {
               message: "New person added", type: "success", person: personInfo});
      });
   }
});

Yukarıdaki kodda, herhangi bir boş alan alırsak veya herhangi bir alan almazsak, bir hata yanıtı göndereceğiz. Ancak iyi biçimlendirilmiş bir belge alırsak, o zaman birnewPerson Person modelindeki belgeyi kullanın ve bunu kullanarak DB'mize kaydedin. newPerson.save()işlevi. Bu, Mongoose'da tanımlanır ve bir geri aramayı bağımsız değişken olarak kabul eder. Bu geri aramada 2 bağımsız değişken vardır - hata ve yanıt. Bu argümanlar,show_message görünüm.

Bu rotadan gelen yanıtı göstermek için, ayrıca bir show_messagegörünüm. Aşağıdaki kodla yeni bir görünüm oluşturun -

html
   head
      title Person
   body
      if(type == "error")
         h3(style = "color:red") #{message}
      else
         h3 New person, 
            name: #{person.name}, 
            age: #{person.age} and 
            nationality: #{person.nationality} added!

Başarıyla gönderdikten sonra aşağıdaki yanıtı alacağız form(show_message.pug) -

Şimdi oluşturmak için bir arayüzümüz var persons.

Belgeleri Alma

Mongoose, belgeleri almak için birçok işlev sağlar, bunlardan 3 tanesine odaklanacağız. Tüm bu işlevler ayrıca son parametre olarak bir geri arama alır ve kaydetme işlevi gibi, bunların argümanları hata ve yanıttır. Üç işlev aşağıdaki gibidir -

Model.find (koşullar, geri arama)

Bu işlev, koşullar nesnesindeki alanlarla eşleşen tüm belgeleri bulur. Mongo'da kullanılan aynı operatörler firavun faresinde de çalışıyor. Örneğin,

Person.find(function(err, response){
   console.log(response);
});

Bu, kişinin koleksiyonundaki tüm belgeleri alacaktır.

Person.find({name: "Ayush", age: 20}, 
   function(err, response){
      console.log(response);
});

Bu, alan adının "Ayush" ve yaşın 20 olduğu tüm belgeleri getirecektir.

İhtiyacımız olan projeksiyonu, yani ihtiyacımız olan alanları da sağlayabiliriz. Örneğin, yalnızcanames insanların nationalityise "Hint" , kullandığımız -

Person.find({nationality: "Indian"}, "name", function(err, response){
   console.log(response);
});

Model.findOne (koşullar, geri arama)

Bu işlev her zaman tek ve en alakalı belgeyi getirir. Aynı argümanlara sahipModel.find().

Model.findById (id, geri arama)

Bu işlev, _id(mongo tarafından tanımlanmıştır) ilk argüman, isteğe bağlı bir projeksiyon dizisi ve yanıtı işlemek için bir geri arama. Örneğin,

Person.findById("507f1f77bcf86cd799439011", function(err, response){
   console.log(response);
});

Şimdi tüm kişi kayıtlarını görüntülemek için bir rota oluşturalım -

var express = require('express');
var app = express();

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

var personSchema = mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});

var Person = mongoose.model("Person", personSchema);

app.get('/people', function(req, res){
   Person.find(function(err, response){
      res.json(response);
   });
});

app.listen(3000);

Belgeleri Güncelleme

Mongoose, belgeleri güncellemek için 3 işlev sunar. Fonksiyonlar aşağıda açıklanmıştır -

Model.update (koşul, güncellemeler, geri arama)

Bu işlev bir koşulu alır ve girdi olarak bir nesneyi günceller ve değişiklikleri koleksiyondaki koşullarla eşleşen tüm belgelere uygular. Örneğin, aşağıdaki kod tüm Kişi belgelerinde "Amerikan" uyruğunu güncelleyecektir -

Person.update({age: 25}, {nationality: "American"}, function(err, response){
   console.log(response);
});

Model.findOneAndUpdate (koşul, güncellemeler, geri arama)

Sorguya göre bir belge bulur ve bunu ikinci bağımsız değişkene göre günceller. Ayrıca son argüman olarak bir geri aramayı alır. İşlevi anlamak için aşağıdaki örneği gerçekleştirelim

Person.findOneAndUpdate({name: "Ayush"}, {age: 40}, function(err, response) {
   console.log(response);
});

Model.findByIdAndUpdate (id, güncellemeler, geri arama)

Bu işlev, kimliği ile tanımlanan tek bir belgeyi günceller. Örneğin,

Person.findByIdAndUpdate("507f1f77bcf86cd799439011", {name: "James"}, 
   function(err, response){
      console.log(response);
});

Şimdi insanları güncellemek için bir rota oluşturalım. Bu birPUT parametre olarak id ve yükteki ayrıntılar ile yol.

var express = require('express');
var app = express();

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

var personSchema = mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});

var Person = mongoose.model("Person", personSchema);

app.put('/people/:id', function(req, res){
   Person.findByIdAndUpdate(req.params.id, req.body, function(err, response){
      if(err) res.json({message: "Error in updating person with id " + req.params.id});
      res.json(response);
   });
});

app.listen(3000);

Bu rotayı test etmek için, terminalinize aşağıdakini girin (kimliği, oluşturduğunuzdan bir kimlik ile değiştirin. people) -

curl -X PUT --data "name = James&age = 20&nationality = American
"http://localhost:3000/people/507f1f77bcf86cd799439011

Bu, rotada verilen kimlik ile ilişkili belgeyi yukarıdaki ayrıntılarla güncelleyecektir.

Belgeleri Silme

Biz kapladık Create, Read ve UpdateŞimdi Mongoose'un nasıl kullanılabileceğini göreceğiz. Deletebelgeler. Burada tam olarak güncelleme gibi 3 fonksiyonumuz var.

Model.remove (koşul, [geri arama])

Bu işlev, girdi olarak bir koşul nesnesini alır ve koşullarla eşleşen tüm belgeleri kaldırır. Örneğin, 20 yaşındaki herkesi çıkarmamız gerekirse, aşağıdaki sözdizimini kullanın -

Person.remove({age:20});

Model.findOneAndRemove (koşul, [geri arama])

Bu işlev, bir single, koşullar nesnesine göre en alakalı belge. Aynısını anlamak için aşağıdaki kodu çalıştıralım.

Person.findOneAndRemove({name: "Ayush"});

Model.findByIdAndRemove (id, [geri arama])

Bu işlev, kimliğiyle tanımlanan tek bir belgeyi kaldırır. Örneğin,

Person.findByIdAndRemove("507f1f77bcf86cd799439011");

Şimdi veritabanımızdan insanları silmek için bir rota oluşturalım.

var express = require('express');
var app = express();

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

var personSchema = mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});

var Person = mongoose.model("Person", personSchema);

app.delete('/people/:id', function(req, res){
   Person.findByIdAndRemove(req.params.id, function(err, response){
      if(err) res.json({message: "Error in deleting record id " + req.params.id});
      else res.json({message: "Person with id " + req.params.id + " removed."});
   });
});

app.listen(3000);

Çıkışı kontrol etmek için aşağıdaki curl komutunu kullanın -

curl -X DELETE http://localhost:3000/people/507f1f77bcf86cd799439011

Bu, belirtilen kimliğe sahip kişiyi kaldıracak ve aşağıdaki mesajı verecektir -

{message: "Person with id 507f1f77bcf86cd799439011 removed."}

Bu, MongoDB, Mongoose ve Express kullanarak nasıl basit CRUD uygulamaları oluşturabileceğimizi özetliyor. Mongoose'u daha fazla keşfetmek için API belgelerini okuyun .