{"id":98637,"date":"2025-02-22T20:45:30","date_gmt":"2025-02-22T17:15:30","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/production-level-nodejs-project-for-a-simple-note-taking-application-1ghi\/"},"modified":"2025-02-22T20:45:30","modified_gmt":"2025-02-22T17:15:30","slug":"production-level-nodejs-project-for-a-simple-note-taking-application-1ghi","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/production-level-nodejs-project-for-a-simple-note-taking-application-1ghi\/","title":{"rendered":"\u067e\u0631\u0648\u0698\u0647 Node.js \u0633\u0637\u062d \u062a\u0648\u0644\u06cc\u062f \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0628\u0631\u062f\u0627\u0631\u06cc"},"content":{"rendered":"<div data-article-id=\"2293068\" id=\"article-body\">\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 Node.js \u062f\u0631 \u0633\u0637\u062d \u062a\u0648\u0644\u06cc\u062f \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0628\u0631\u062f\u0627\u0631\u06cc \u060c \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u06a9\u062f \u0645\u0646\u0628\u0639 \u0622\u0646 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\u251c\u2500\u2500 package.json\n\u251c\u2500\u2500 server.js\n\u251c\u2500\u2500 routes\n\u2502   \u2514\u2500\u2500 notes.js\n\u251c\u2500\u2500 controllers\n\u2502   \u2514\u2500\u2500 notesController.js\n\u251c\u2500\u2500 models\n\u2502   \u2514\u2500\u2500 note.js\n\u251c\u2500\u2500 services\n\u2502   \u2514\u2500\u2500 noteService.js\n\u251c\u2500\u2500 config\n\u2502   \u2514\u2500\u2500 db.js\n\u2514\u2500\u2500 test\n    \u2514\u2500\u2500 notes.test.js\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>PACK.JSON: \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0648 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0647\u0627 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>    {\n      \"name\": \"note-taking-app\",\n      \"version\": \"1.0.0\",\n      \"description\": \"Simple note-taking application\",\n      \"main\": \"server.js\",\n      \"scripts\": {\n        \"start\": \"node server.js\",\n        \"dev\": \"nodemon server.js\",\n        \"test\": \"jest --watchAll --coverage\"\n      },\n      \"dependencies\": {\n        \"express\": \"^4.17.1\",\n        \"mongoose\": \"^6.0.12\",\n        \"dotenv\": \"^10.0.0\",\n        \"jest\": \"^27.3.1\",\n        \"supertest\": \"^6.1.6\"\n      },\n      \"devDependencies\": {\n        \"nodemon\": \"^2.0.15\"\n      }\n    }\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>Server.js: \u0646\u0642\u0637\u0647 \u0627\u0635\u0644\u06cc \u0648\u0631\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>    \/\/ server.js\n    const express = require('express');\n    const mongoose = require('mongoose');\n    const dotenv = require('dotenv');\n    const routes = require('.\/routes\/notes');\n    const app = express();\n    dotenv.config();\n\n    \/\/ Middleware to parse JSON request bodies\n    app.use(express.json());\n\n    \/\/ Routes\n    app.use('\/api\/notes', routes);\n\n    const start = async () =&gt; {\n      try {\n        await mongoose.connect(process.env.MONGO_URI);\n        app.listen(process.env.PORT, () =&gt; console.log(`Server started on port ${process.env.PORT}`));\n      } catch (error) {\n        console.error(error);\n        process.exit(1);\n      }\n    };\n\n    start();\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0633\u06cc\u0631\u0647\u0627\/\u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627: \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u0631\u0627 \u0628\u0631\u0627\u06cc \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>    \/\/ routes\/notes.js\n    const express = require('express');\n    const router = express.Router();\n    const notesController = require('..\/controllers\/notesController');\n\n    router.get(\"https:\/\/dev.to\/\", notesController.getAllNotes);\n    router.post(\"https:\/\/dev.to\/\", notesController.createNote);\n    router.get('\/:id', notesController.getNoteById);\n    router.put('\/:id', notesController.updateNote);\n    router.delete('\/:id', notesController.deleteNote);\n\n    module.exports = router;\n\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0647\u0627\/notescontroller.js: \u0645\u0646\u0637\u0642 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>    \/\/ controllers\/notesController.js\n    const noteService = require('..\/services\/noteService');\n\n    const getAllNotes = async (req, res) =&gt; {\n      try {\n        const notes = await noteService.getAllNotes();\n        res.json(notes);\n      } catch (error) {\n        res.status(500).json({ message: error.message });\n      }\n    };\n\n    const createNote = async (req, res) =&gt; {\n        try {\n            const newNote = await noteService.createNote(req.body);\n            res.status(201).json(newNote);\n        } catch (error) {\n            res.status(500).json({ message: error.message });\n        }\n    };\n\n    const getNoteById = async (req, res) =&gt; {\n        try {\n            const note = await noteService.getNoteById(req.params.id);\n            if (!note) {\n                return res.status(404).json({ message: 'Note not found' });\n            }\n            res.json(note);\n        } catch (error) {\n            res.status(500).json({ message: error.message });\n        }\n    };\n\n    const updateNote = async (req, res) =&gt; {\n        try {\n            const updatedNote = await noteService.updateNote(req.params.id, req.body);\n            if (!updatedNote) {\n                return res.status(404).json({ message: 'Note not found' });\n            }\n            res.json(updatedNote);\n        } catch (error) {\n            res.status(500).json({ message: error.message });\n        }\n    };\n\n    const deleteNote = async (req, res) =&gt; {\n        try {\n            const result = await noteService.deleteNote(req.params.id);\n            if (!result) {\n                return res.status(404).json({ message: 'Note not found' });\n            }\n            res.status(204).send();\n        } catch (error) {\n            res.status(500).json({ message: error.message });\n        }\n    };\n\n    module.exports = {\n        getAllNotes,\n        createNote,\n        getNoteById,\n        updateNote,\n        deleteNote,\n    };    \n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>Models\/Note.js: \u0637\u0631\u062d \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Mongoose \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>    \/\/ models\/note.js\n    const mongoose = require('mongoose');\n\n    const noteSchema = new mongoose.Schema({\n      title: {\n        type: String,\n        required: true\n      },\n      content: {\n        type: String,\n        required: true\n      },\n      createdAt: {\n        type: Date,\n        default: Date.now\n      },\n      updatedAt: {\n        type: Date,\n        default: Date.now\n      }\n    });\n\n    module.exports = mongoose.model('Note', noteSchema);\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>Services\/Noteservice.js: \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u062a \u0628\u0631\u0627\u06cc \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>    \/\/ services\/noteService.js\n    const Note = require('..\/models\/note');\n\n    const getAllNotes = async () =&gt; {\n      return await Note.find();\n    };\n\n    const createNote = async (noteData) =&gt; {\n        const note = new Note(noteData);\n        return await note.save();\n    };\n\n    const getNoteById = async (id) =&gt; {\n        return await Note.findById(id);\n    };\n\n    const updateNote = async (id, noteData) =&gt; {\n        return await Note.findByIdAndUpdate(id, noteData, { new: true });\n    };\n\n    const deleteNote = async (id) =&gt; {\n        return await Note.findByIdAndDelete(id);\n    };\n\n    module.exports = {\n        getAllNotes,\n        createNote,\n        getNoteById,\n        updateNote,\n        deleteNote,\n    };\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\/db.js: \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0627\u062a\u0635\u0627\u0644 MongoDB.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>    \/\/ config\/db.js\n    const mongoose = require('mongoose');\n\n    const connectDB = async () =&gt; {\n      try {\n        await mongoose.connect(process.env.MONGO_URI, {\n          useNewUrlParser: true,\n          useUnifiedTopology: true,\n          useCreateIndex: true,\n          useFindAndModify: false\n        });\n        console.log('MongoDB connected');\n      } catch (error) {\n        console.error('MongoDB connection error:', error);\n        process.exit(1);\n      }\n    };\n\n    module.exports = connectDB;\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u062f\u0631 \u0632\u06cc\u0631 \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 Node.js \u062f\u0631 \u0633\u0637\u062d \u062a\u0648\u0644\u06cc\u062f \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0628\u0631\u062f\u0627\u0631\u06cc \u060c \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u06a9\u062f \u0645\u0646\u0628\u0639 \u0622\u0646 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a. \u251c\u2500\u2500 package.json \u251c\u2500\u2500 server.js \u251c\u2500\u2500 routes \u2502 \u2514\u2500\u2500 notes.js \u251c\u2500\u2500 controllers \u2502 \u2514\u2500\u2500 notesController.js \u251c\u2500\u2500 models \u2502 \u2514\u2500\u2500 note.js \u251c\u2500\u2500 services \u2502 \u2514\u2500\u2500 noteService.js \u251c\u2500\u2500 config \u2502 \u2514\u2500\u2500 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":98638,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-98637","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/98637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=98637"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/98637\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/98638"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=98637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=98637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=98637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}