إنشاء api بسيط local لتطبيق note باستخدام nodeJS

إنشاء api بسيط local لتطبيق note باستخدام nodeJS

إنشاء api بسيط local لتطبيق note باستخدام nodeJS

في هذه المقال سوف نقوم بعمل معكم تطبيق note بسيط يكون local على الجهاز بمعنى لن نحتاج لقاعدة بيانات حتى نعمل عليها فالامر بسيط جدا كل هذا سوف يكون من خلال الاكواد التي نقدمها لكم في هذه المقاله وسوف يكون api نقوم بعمله معكم حتى تكون قادر على بناء تطبيقات apis بسهوله , الفكرة نفسها ولن يختلف فقط في بعض الامور البسيطه جدا والتي سوف نشاركها معكم في الدروس القادمه كيف تتعامل مع sql وايضا كيفية التعامل مع mongoDB حتى تقوم ببناء قاعدة بيانات متكامله .


المكتبات التي سوف نحتاجها اليوم


memorystorage : لتخزين البيانات في الذاكرة المحليه

sequential-ids : لتوليد ارقام بنمط معين بشكل مرتب


تهيئة ملفات المشروع لبدء انشاء note api

هذا الترتيب الذي سوف تمشي عليه حتى تقوم ببناء api سهل التعديل عليه مستقبلا .


تهيئة ملفات المشروع لبدء انشاء note api

الاكواد المستعمله لبناء api بشكل ناجح


الاكواد المستعمله لبناء api بشكل ناجح

تاكد انك تستعمل في الكود الخاص بك في صفحة main لانه لم يتم ارفاقه بالصورة ويتوفر بالكود الموجود بالاسفل .


app.use(bodyParser.urlencoded({ extended: false }))

app.use(bodyParser.json());



كود api باستخدام local storage وانشاء api

هذه الاكواد الخاصه بالملفات التي نقدمها لكم بالاعلى يمكنك نسخ الاكواد وانشاء الملفات الخاصه بها ولكن في ملف test سوف يكون هناك بعض التعديلات كما هو موجوده بالاعلى حتى تتمكن من الحصول على البيانات من api الى التطبيق الخاص بك .


كود api باستخدام local storage وانشاء api

app.js


// ------------ test.js (main file) ------------ //
var express = require('express')
var cors = require('cors')
var bodyParser = require('body-parser')
var noteRoute = require('./route/route')
var app = express()
app.use(cors())

// get data req from postman or any platform to test api
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json());

app.get('/', function (req, res) {
    res.send('sarver is loaded')
  });

app.use('/api/v1',noteRoute)
  
  app.listen(3000, function () {
    console.log('sarver is loaded')
  })
  
// ------------ generator.js ------------ //
var sequential = require("sequential-ids");
 
// generate numbers by order sort
var generator = new sequential.Generator({
  digits: 3,
  // format
  restore: "000"
});

generator.start();

module.exports = generator
  
// ------------ memorystorage.js ------------ //

var MemoryStorage = require('memorystorage');
var myStorage = new MemoryStorage('note-app');

exports.getKeys = (myStorage) => {
    var keys = [];
    for (var i=0; i<myStorage.length; i++) {
        keys.push(myStorage.key(i))
    }
    return keys;
}

exports.getValus = (myStorage) => {
    var valus = [];
    for (var i=0; i<myStorage.length; i++) {
        var key = myStorage.key(i);
        valus.push(myStorage.getItem(key))
    }
    return valus;
}

exports.myStorage = myStorage;
  
// ------------ note_model.js ------------ //
exports.Note = class Note {
    constructor(id,title,body,created_by,created_at,) {
        this.id = id;
        this.title = title;
        this.body = body;
        this.created_by = created_by;
        this.created_at = created_at;
    }
}  
// ------------ controller.js ------------ //
var generator = require('../utils/generator')
var memorystorage = require('../utils/memorystorage')
var model = require('../models/note_model')

exports.getAllNote = (req,res)=> {
    var note_id = generator.generate();
    memorystorage.myStorage.setItem(note_id,"first");
    var note_id2 = generator.generate();
    memorystorage.myStorage.setItem(note_id2,"socond");

    var keys = memorystorage.getKeys(memorystorage.myStorage)
    var valus = memorystorage.getValus(memorystorage.myStorage)

    console.log('values ------------------- ' + JSON.stringify(valus))
    console.log('values ------------------- ' + JSON.stringify(keys))

    var Note = model.Note;
    var noteObj = new Note(note_id,'ahmed','ahmed body' , 'ahmed' , new Date());
    res.send('get all notes ----- ' + JSON.stringify(noteObj));
}

exports.sendNote = (req,res)=> {
    res.send('sendNote ----- ');
}

exports.updateNote = (req,res)=> {
    res.send('updateNote ----- ');
}

exports.deleteNote = (req,res)=> {
    res.send('deleteNote ----- ');
}
  
// ------------ route.js ------------ //
var express = require('express');
const router = express.Router();
var cntroller = require('../controller/controller')

router.get('/get-notes',cntroller.getAllNote)
router.get('/send-note',cntroller.sendNote)
router.get('/update-note',cntroller.updateNote)
router.get('/delete-note',cntroller.deleteNote)

module.exports = router


كيفية إضافة بيانات على السيرفر في note api بواسطة nodeJS

في البداية سوف نقوم بتعديل بعض ال requests في routs


router.get('/get-notes',cntroller.getAllNote)

router.post('/send-note',cntroller.sendNote)

router.put('/update-note',cntroller.updateNote)

router.delete('/delete-note',cntroller.deleteNote)


ناتي الان الى اول خاصية وهيا اضافة عنصر باستخدام api كما اخبرناكم انه في ثاني صورة الكود الخاص بي bodyParser يجب ان يكون لديكم حتى لا يحدث مشاكل معك اثناء عملية اضافة العناصر في تطبيقك .


كيفية إضافة بيانات على السيرفر في note api بواسطة nodeJS

add.js


exports.sendNote = (req,res)=> {
    var seqId   = generator.generate();
    var createdBy = "admin";
    var createdOn = new Date();
    try {
        var title = req.body.title;
        var content = req.body.content;
    
        if(!title || !content){
            console.log(content);
            console.log(title);
            return res.status(500).send({ error: 'Title and Content should not be empty' })
        }
        
        var Note = model.Note;
        var noteObj = new Note(seqId , title , content , createdBy , createdOn);
        memorystorage.myStorage.setItem(seqId , noteObj);
        console.log(title);
        console.log(content);
        return res.status(201).send("Successfully note saved ");

    } catch (e) {
        return res.status(500).send({ error: 'Error' })
    }
}


كيفية عرض البيانات من السيرفر باستخدام nodeIS

الان ناتي الى مسالة الحصول على جميع العناصر وبها انتقلنا الى ذاكرة التخزين المؤقت التي قمنا بها وحصلنا على ال key الذي يحمل البيانات وبعدها قمنا بعرضه واذا لم يكن هناك بيانات سوف نعرض رساله توضح للمستخدم انه لا يوجد بيانات او عناصر في هذا القسم .


كيفية عرض البيانات من السيرفر باستخدام nodeIS

get_data.js


exports.getAllNote = (req,res)=> {
    var values = memorystorage.getValus(memorystorage.myStorage);
    if (values.length <= 0) {
        return res.status(505).send("You have no items yet is here");
    }
    console.log("Values ....... " + JSON.stringify(values));
    return res.status(200).send(JSON.stringify(values));
}


كيفية التعديل على احد عناصر api بواسطة js

الان في عملية تحديث البيانات لا تختلف كثيرا عن عملية اضافة بيانات فهي نفس العملية السابقه ولكن هنا نقوم بتعديل بيانات المستخدم فقط دون اضافتها من البداية .


كيفية التعديل على احد عناصر api بواسطة js

update.js


exports.updateNote = (req,res)=> {
    var createdBy = "admin";
    var createdOn = new Date();

    var noteId = req.body.noteId;
    var title = req.body.title;
    var body = req.body.body;
    if(!noteId){
        return res.status(500).send({ error: 'noteId should not be empty' })
    }
    if(!title || !body){
        return res.status(500).send({ error: 'Title and Content should not be empty' })
    }

    var noteItem = memorystorage.myStorage.getItem(noteId);
    if(!noteItem){
        return res.status(500).send({ error: 'noteId is not exist' })
    }
    
    var Note = model.Note;
    var noteObj = new Note(noteId , title , body , createdBy , createdOn);
    memorystorage.myStorage.setItem(noteId , noteObj);
    return res.status(200).send("Successfully note updated ");

}


كيفية حذف عنصر من api بواسطة nodeIS

سوف نحتاج الى تغيير بسيط في route في جزء الحذف سوف نضع الكود التالي


router.delete('/delete-note/:noteId',cntroller.deleteNote)


حتى نجرب طريقة اخرى في التعامل مع البيانات وهنا سوف نحذف البيانات عن طريق وضع رقم العنصر في العنوان .


كيفية حذف عنصر من api بواسطة nodeIS

delete.js


exports.deleteNote = (req,res)=> {
    var noteId = req.params.noteId;

    // validate not empty
    if(!noteId){
        return res.status(500).send({ error: 'can not delete empty noteId' })
    }

    // validate is already exists
    var noteItem = memorystorage.myStorage.getItem(noteId);
    if(!noteItem){
        return res.status(500).send({ error: 'noteId is not exist' })
    }

    // is exits
    memorystorage.myStorage.removeItem(noteId);
    return res.status(200).send("Successfully note deleted ");
}


التعامل مع ال requisites من خلال postman


التعامل مع ال requisites من خلال postman

رابط المشروع على جيت هب

تعليقات