Node js (Express) ve Mongodb ile basit restApi oluşturmak

Merhaba,

Uzun zamandır aklımda basit şöyle uçtan uca bir proje yapmak var. Frontend, backend ve mobil.  Bu bariz fullstack oluyor. Ama hepsi js ile olduğundan çok sorun etmiyorum.Bu yüzden node js tarafında bir şeyler öğrenmek istiyorum. Öğrendiklerimide fırsat buldukça yazayım. Lazım olur.

Burada amacım post servisi yazmak. Örnek olsun diye kullanıcıyı mongodbye kayıt edeceğim.  Kullanıcı kayıt apisi diye düşünebilirsiniz.

Ben nodejs ‘in express js frameworkü ile yazacağım. Hatta express generatör ile hazır projeyi kurup üzerinden başlayabilirsiniz.   Mongodb baglantısı vs yapılmış. Gerekli modüller kurulduğunu var sayıyorum. (mongoose gibi). Kurmadıysanız  kurun.

npm install mongoose — save

Yukarıda dediğim gibi ben express generatör ile projeyi kurup, mongodb baglantımı yaptım.  Mongodb için  “Moongose”  modülünü kurdum. Şimdi geldi servisi yazmaya

  1. Model klasörü açıp içerisine SignUp.js dosyayı oluşturuyorum. Burada mongodbdeki  tablonun şemasını yapacağız diyebilirim.
    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;
    
    const SignUpSchema = new Schema({
      userName:{
        type:String,
        required:true
      },
      age: Number,
      password: String,
      email: String,
      tarih:{
        type: Date,
        default: Date.now()
      }
    });
    
    module.exports = mongoose.model('signUp',SignUpSchema);
    
  2.  Routes klasörümüze gidip signup.js dosyamızı oluşturalım.
    var express = require('express');
    var router = express.Router();
    
    // Models
    const Signup = require("../models/SignUp")
    
    /* GET users listing. */
    router.post('/', function(req, res, next) {
      const {userName,age,password,email} = req.body;
    
      const singup = new Signup({ //nesne türetiyoruz
        userName:userName,
        age:age,
        password:password,
        email:email
      });
    
      const promise = singup.save();
      promise.then((data)=>{
        res.json(data); //başarılı durumunda gösterilecek değer
      }).catch((err)=>{
        res.json(err);
      })
    
    });
    
    module.exports = router;
    
  3.   App.js dosyamıza gelelim. Burada routerımızı ekleyelim
    const createError = require('http-errors');
    const express = require('express');
    const path = require('path');
    const cookieParser = require('cookie-parser');
    const logger = require('morgan');
    
    const indexRouter = require('./routes/index');
    const usersRouter = require('./routes/users');
    const userRouter = require('./routes/user');
    const signupRouter = require('./routes/signup');
    
    const app = express();
    
    //db connection
    const db = require('./helper/db.js')();
    
    
    
    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'jade');
    
    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));
    
    app.use('/', indexRouter);
    app.use('/api/users', usersRouter);
    app.use('/user', userRouter);
    app.use('/singup', signupRouter);
    
    // catch 404 and forward to error handler
    app.use((req, res, next)=> {
      next(createError(404));
    });
    
    // error handler
    app.use((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;
    

     

  4.  Postman ile servisimizi deneyelim. Kullanalım. Gerekli ekranı ekliyorum. Başarılı oldugunu göreceksiniz. 
  5.  Mongodb üzerinden kontrol edeyim. robo 3t gibi arayüz programı ilede de bağlanabilirsiniz. Ben mongodb cloud kullandım. Onun kendi arayüzünden göstereceğim.

Express js ile basit bir api yazmış olduk. Zaman buldukça diğerinide yapacağım. Hadi eyvallah

Yeni bir yazı yazarak uzatmak istemedim. En çok kullanılan diğer metodlarıda buraya kısaca ekliyorum. Get, Put, Delete.

Router klasöründeki signup.js dosyamıza ekleyelim.

1. Get (dbye kayıt ettiğimiz kullanıcıları listeleyelim) 

/* GET users listing. */
router.get('/get/',(req,res)=>{
  const promise = Signup.find({});
  promise.then((data) => {
    res.json(data);
  }).catch((err) => {
    res.json(err);
  })

});

bu bütün listeyi getirir. Eğer sadece bir kullanıcıyı çekmek istiyorsak şöyle yapacağız

  1. /* get user */
    router.get('/get/:user_id',(req,res,next)=>{
      const promise = Signup.findById(req.params.user_id);
    
      promise.then((user) => {
        if(!user)
          next({message: "Aradığınız kullanıcı bulunamadı", code: '1'})
          res.json(user);
      }).catch((err) => {
        res.json(err);
      })
    
    });
    

    user_id olarak mongodb’deki _id değerini vermek gerekiyor. İlgili personel gelecektir.

    2.  Put  (kullanıcı bilgilerini güncelleyelim) 

    /* update */
    router.put('/put/:user_id',(req,res,next)=>{
      const promise = Signup.findByIdAndUpdate(
        req.params.user_id,
        req.body,
        {
          new:true
        }
        );
    
      promise.then((user) => {
        if(!user)
          next({message: "Güncellemek istediğin kullanıcı bulunamadı", code: '2'})
        res.json(user);
      }).catch((err) => {
        res.json(err);
      })
    
    });
    

    3.  Delete  (kullanıcıyı db’den silelim)

    /* Delete user */
    router.delete('/delete/:user_id',(req,res,next)=>{
      const promise = Signup.findByIdAndRemove(req.params.user_id);
    
      promise.then((user) => {
        if(!user)
          next({message: "Silmek istediğiniz kullanıcı bulunamadı", code: '3'})
        res.json(user);
      }).catch((err) => {
        res.json(err);
      })
    
    });

     

     

Bir cevap yazın