"Enter"a basıp içeriğe geçin

NodeJS + Express + MongoDB REST API Rehberi Bölüm 4

Herkese tekrardan merhabalar. Makale serimizin önceki bölümünde MongoDB bağlantısını yapmıştık, bu bölümde Mongo’ya veri göndereceğiz, veri alacağız…

Öncelikle göndereceğimiz verinin yapısını (Model) tanımlamamız lazım. Projemizi geliştirmeye models adında bir klasör oluşturarak devam edelim.

Ardından içerisine Todo.js adında bir dosya oluşturalım. Mongo’ya yapılacaklar tarzında veri göndereceğiz.

Todo.js dosyasını şekildeki gibi düzenleyelim.

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const Todo = mongoose.model('Todo', new mongoose.Schema({
    title: {
        type: String,
        required: true
    },
    description: {
        type: String,
        required: true
    }
}, { timestamps: true }
));

exports.Todo = Todo;

Todo adında yeni bir Schema oluşturduk ve title, description olarak 2 adet özellik belirledik. String tipinde ve girilmesi zorunlu. Veri girişlerinin yapıldığı tarihi de timestamps ile tutacağız.

Şimdi controller’a gelelim ve Mongo’ya bir Todo verisi gönderelim.

getUser’ı isterseniz silebilirsiniz, ben siliyorum.

postTodo, getTodo, getTodos, updateTodo ve deleteTodo olarak 5 adet fonksiyon ekliyorum.

const mongoose = require('mongoose');
const { Todo } = require('../models/Todo');

exports.getIndex = async (req, res) => {
    res.send('Hello, index!!!');
};

exports.postTodo = async (req, res) => {
    try {
        const newTodo = new Todo({
            title: req.body.title
        });

        const todo = await newTodo.save();

        res.json(todo);
    } catch (err) {
        res.status(500).send('Server error.');
        console.error(err.message);
    }
};

exports.getTodo = async (req, res) => {
    try {
        const todo = await Todo.findById(req.params.id);

        if (!todo) {
            return res.status(404).json({ msg: 'Todo bulunamadı' });
        }

        res.json(todo);
    } catch (err) {
        res.status(500).send('Server error.');
        console.error(err.message);
    }
};

exports.getTodos = async (req, res) => {
    try {
        const todos = await Todo.find();
        res.json(todos);
    } catch (err) {
        res.status(500).send('Server error.');
        console.error(err.message);
    }
};

exports.updateTodo = async (req, res) => {
    try {
        Todo.findByIdAndUpdate(req.params.id, {
            title: req.body.title
        });
        res.json({ result: 'Successful.' });
    } catch (err) {
        res.status(500).send('Server error.');
        console.error(err.message);
    }
};

exports.deleteTodo = async (req, res) => {
    Todo.findByIdAndRemove(req.params.id, (err, result) => {
        if (err) {
            console.error(err);
            res.status(500).send('Server error.');
        } else {
            res.json({ result: result });
        }
    })
};

Fonksiyonlarda özet olarak şu işlemleri yapıyoruz; Todo bir mongoose model’i olduğu için mongoose fonksiyonlarını aynen kullanabiliyoruz. params dediğimiz kısım url’de verdiğimiz parametre olacak.

Routes dosyasına da rotalarımızı ekleyelim.

const router = require('express').Router();
const controller = require('../controllers/controller');

router.get('/', controller.getIndex);

router.get('/todo/:id', controller.getTodo);

router.get('/todos', controller.getTodos);

router.post('/todo', controller.postTodo);

router.put('/todo/:id', controller.updateTodo);

router.delete('/todo/:id', controller.deleteTodo);

module.exports = router;

Postman’e geçmeden önce projemize kurduğumuz fakat dahil etmediğimiz son bir paketi daha dahil edelim. body-parser. JSON olarak haberleşmemizi sağlayacak. server.js dosyasını aşağıdaki şekilde düzenleyelim:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

const connectDB = require('./config/db');

connectDB();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use('/api', require('./routes/routes'));

app.set('port', process.env.PORT || 5000);

app.listen(app.get('port'), () => {
    console.log(`Server is listening on http://localhost:${app.get('port')}`);
});

Şimdi Postman’den bakalım.

Bu arada verileri MongoDB’den de kontrol edebilirsiniz, collections kısmından.

Makale serisinin sonuna geldik. Umarım faydalı olmuştur. Herkese iyi çalışmalar.

Bu bölümün kaynak kodları. Ayrıca projenin kaynak kodları.

<- Önceki bölüm

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir