<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andi Ismail</title>
    <description>The latest articles on DEV Community by Andi Ismail (@andiismail).</description>
    <link>https://dev.to/andiismail</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F879280%2F198ea23f-b397-4c6b-83ec-64f145f8b603.png</url>
      <title>DEV Community: Andi Ismail</title>
      <link>https://dev.to/andiismail</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andiismail"/>
    <language>en</language>
    <item>
      <title>Cara add domain ke vercel</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Sun, 05 Feb 2023 04:21:49 +0000</pubDate>
      <link>https://dev.to/andiismail/cara-add-domain-ke-vercel-3cb4</link>
      <guid>https://dev.to/andiismail/cara-add-domain-ke-vercel-3cb4</guid>
      <description>&lt;p&gt;Cara menambahkan domain custom ke website vercel&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F852gt9cemyfez89hgkoa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F852gt9cemyfez89hgkoa.png" alt="Image error vercel" width="739" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;akan error ketika memasukkan domain ke website anda di vercel. selanjutnya kita akan setting dns di link berikut &lt;a href="https://www.domainesia.com/panduan/cara-setting-dns-dengan-mudah/" rel="noopener noreferrer"&gt;https://www.domainesia.com/panduan/cara-setting-dns-dengan-mudah/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04p42o7og9b5l4es35nj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04p42o7og9b5l4es35nj.png" alt="Image domainesia" width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;clik nama domain bukan di centang akan muncul  gambar berikut, click use default namseservers &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw05z3imfk8l5qrp7dbfi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw05z3imfk8l5qrp7dbfi.png" alt="Image domain" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;lanjut ke dns &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ynch9lbbqupm8z0q14w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ynch9lbbqupm8z0q14w.png" alt="Image dns" width="748" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;dan ini hasilnya : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;websitenya &lt;a href="https://www.andiismail.my.id/" rel="noopener noreferrer"&gt;https://www.andiismail.my.id/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;hosting &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;https://vercel.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;domain &lt;a href="https://www.domainesia.com/" rel="noopener noreferrer"&gt;https://www.domainesia.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pakai Framework React Js, css&lt;/li&gt;
&lt;li&gt;Tampilan websitenya &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqd1c6yo7m4m5svqrdp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqd1c6yo7m4m5svqrdp2.png" alt="Image online" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>React myRooms - 1 navbar</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Tue, 31 Jan 2023 00:56:41 +0000</pubDate>
      <link>https://dev.to/andiismail/react-myrooms-17kf</link>
      <guid>https://dev.to/andiismail/react-myrooms-17kf</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir hotelBookingSystem
cd hotelBookingSystem
npx create-react-app client
cd client
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selesai membuat react app&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3a8zw3dlayiab6y4j5du.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3a8zw3dlayiab6y4j5du.png" alt="Image folder" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tambahkan Bootstrap di atas title file index.html&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// index.html

&amp;lt;!-- Link Css dan Js Bootstrap --&amp;gt;
    &amp;lt;link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" ..."&amp;gt;
    &amp;lt;script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" ..."&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;title&amp;gt;React App&amp;lt;/title&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita akan buat 2 folder Component, screen.&lt;br&gt;
lanjut ke navbar, kita akan rubah background navbar warna hitam, tulisan warna hitam, dan logo myRooms berwarna putih dan link navbar register dan login kita tempatkan ke kiri otomatis.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index.css

.navbar {
  background-color: black !important;
}
.nav-link{
  color: white !important;
}
.navbar-brand {
  color: white !important;
}
.navbar-nav {
  margin-left: auto !important;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1cot6vhsuapazne6ozoh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1cot6vhsuapazne6ozoh.png" alt="Image selesai navbar" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/andiks2018/hotelBookingSystem.git" rel="noopener noreferrer"&gt;github repo&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/playlist?list=PLflVqQLAWzC9qybF40gPXpzntMQIoYG5u" rel="noopener noreferrer"&gt;link belajar&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>Express jwt 2</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Fri, 06 Jan 2023 06:59:08 +0000</pubDate>
      <link>https://dev.to/andiismail/express-jwt-2-5gp</link>
      <guid>https://dev.to/andiismail/express-jwt-2-5gp</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/andiks2018/JvalleyExpress-jwtPostman.git express_jwt_2

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;buat file .env&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DATABASE_URL="file:./db.sqlite"
PORT=8000
SECRET_KEY="masukanSecretKeyKamuTerserahApaAja"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;npx prisma db push&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;selanjutnya kita akan buat relasi di scheme prisma, serta mengganti author dengan user_id&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//schema.prisma

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

model Users {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  password  String
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  //relation
  notes Notes[]
}

model Notes {
  id        Int      @id @default(autoincrement())
  title     String
  content   String
  user_id   Int
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  //relation
  user Users @relation(fields: [user_id], references: [id])
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;setelah merubah data di model schema prisma selanjutnya kita db push ulang&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx prisma db push&lt;/code&gt;&lt;br&gt;
selanjutnya kita akan jalankan server dengan perintah &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;selanjutnya kita buat file test.rest sebelumnya kita sudah menginstal extension  REST Client for Visual Studio Code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//test.rest


###
POST http://localhost:8000/user/register
Content-Type: application/json

{
    "email":"andi@andi.com",
    "password": "cobapassword"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T3-RzIm5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4cy75p3fji7pk56t5ue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T3-RzIm5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4cy75p3fji7pk56t5ue.png" alt="Image send request 201 created" width="880" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--boQWkj2---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8lxruwp19vw4vsyrz2g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--boQWkj2---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8lxruwp19vw4vsyrz2g.png" alt="Image berhasil" width="880" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sebelumnya kita sudah membuat register user selanjutnya kita akan membuat login user di user_controller.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_controller.js

import { request, response } from "express"
import db from "../../prisma/connection"
import jwt from "jsonwebtoken"
import env from "dotenv"
env.config()

// create user
export const user_register = async (req = request, res = response) =&amp;gt; {
    try {

        // membaca request body
        const data = await req.body

        // tulis data dari body ke database
        const result = await db.users.create({
            data: data
        })

        const { SECRET_KEY } = process.env

        // generated token
        const token = jwt.sign({
            id: result.id,
            email: result.email
        }, SECRET_KEY)

        // kembalikan response json
        res.status(201).json({
            success: true,
            message: "user berhasil di tambahkan ke database",
            token: token
        })

    } catch (error) {
        res.status(500).json({
            success: false,
            error: error.message
        })
    }
}

//login user
export const user_login = async (req = request, res = response) =&amp;gt; {
    try {

        //kita ambil body
        const data = await req.body

        //check email
        const checkEmail = await db.users.findUnique({
            where: {
                email: data.email
            }
        })

        //jika email tidak ditemukan di database
        if (!checkEmail) {
            return res.status(404).json({
                success: false,
                message: "email tidak ditemukan"
            })
        }

        //jika password tidak sama
        if (data.password !== checkEmail.password) {
            return res.status(401).json({
                success: false,
                message: "password kurang tepat"
            })
        }

        //generate token
        const token = jwt.sign({
            id: checkEmail.id,
            email: checkEmail.email
        }, process.env.SECRET_KEY)

        //kembalikan reseponse json
        res.status(500).json({
            success: true,
            message: "user berhasil di tambahkan ke database",
            token: token
        })

    } catch (error) {
        res.status(500).json({
            success: false,
            error: error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tambahkan user login&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_routes.js

import express from "express"
import { user_login, user_register } from "../controllers/user_controllers"

const user_routes = express.Router()

// user register
user_routes.post("/user/register", user_register)
user_routes.post("/user/login", user_login)

export default user_routes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita ke test.rest untuk menambahkan user login&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//test.rest


### USER REGISTER
POST http://localhost:8000/user/register
Content-Type: application/json

{
    "email":"andi@andi.com",
    "password": "cobapassword"
}

### USER LOGIN

POST http://localhost:8000/user/login
Content-Type: application/json

{
    "email":"andi@andi.com",
    "password": "cobapassword"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cZSjXvTQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlvlez2ncqvw1qg8nzap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cZSjXvTQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlvlez2ncqvw1qg8nzap.png" alt="Image note" width="880" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kita tidak bisa register dengan email yang sama, &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hUv8B7SK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlopd2u5deeyxzikl4d1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hUv8B7SK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlopd2u5deeyxzikl4d1.png" alt="Image send login dan register " width="880" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kalau kita cek password generate muncul user dan id &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yrgrjM5M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1yhvr3llpmzvpb1phvdi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yrgrjM5M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1yhvr3llpmzvpb1phvdi.png" alt="Image jwt.io" width="880" height="484"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;kita butuh generate req bdy&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_mdw.js

import { request, response } from "express"
import jwt from "jsonwebtoken"
import env from "dotenv"
env.config()

const user_mdw = async (req = request, res = response, next) =&amp;gt; {
    try {
        // coba check apakah ada authorization
        const authorization = await req.headers.authorization
        if (!authorization) {
            return res.status(401).json({
                success: false,
                message: "authorization tidak ditemukan !"
            })
        }
        const token = await authorization.split(" ")[1]
        // validasi token
        const verify = await jwt.verify(token, process.env.SECRET_KEY)
        if (!verify) {
            return res.status(401).json({
                success: false,
                message: "Token tidak terverifikasi!"
            })
        }

        /**
         * {
         *  "id" : 1,
         *  "email" : 'andi@andi.com'
         * }
         * 
         * lanjut boss..
         */

        //generate req body
        req.body.user_id = verify.id
        req.body.email = verify.email
        next()

    } catch (error) {
        res.status(401).json({
            success: false,
            error: error.message
        })
    }
}

export default user_mdw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;lanjut ke test rest, tapi sebelumnya kita harus rubah data menjadi objek dengan inputan nilai title content dan user_id&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--boJy_ayz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gna6uo6u8cymqss4pgl7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--boJy_ayz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gna6uo6u8cymqss4pgl7.png" alt="Image data" width="778" height="300"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//note_controller.js

import { request, response } from "express"
import db from "../../prisma/connection"

// read notes
export const notes_read = async (req = request, res = response) =&amp;gt; {
    try {
        const result = await db.notes.findMany()
        res.status(200).json({
            success: true,
            notes: result
        })
    } catch (error) {
        res.status(500).json({
            success: false,
            error: error.message
        })
    }
}

// create note
export const notes_create = async (req = request, res = response) =&amp;gt; {
    try {
        const data = await req.body
        const createNote = await db.notes.create({
            data: {
                title : data.title,
                content : data.content,
                uer_id : data.user_id
            }
        })
        res.status(201).json({
            success: true,
            message: "Berhasil menambahkan note ke database",
            note: createNote
        })
    } catch (error) {
        res.status(500).json({
            success: false,
            error: error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tadi ada beberapa error http yang salagh tulis, kemudian ketika send request create note katanya jwt must provider. solusinya tadi kita hapus file db.sqlite kemudian kita &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx prisma db push&lt;/code&gt; ulang &lt;/p&gt;

&lt;p&gt;maka kemudian send request ulang , register, login, dan create note.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7isS6o8Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oq80dbvw1zdpkqjm1j03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7isS6o8Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oq80dbvw1zdpkqjm1j03.png" alt="Image berhasil login" width="880" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sampai disini selesai create note&lt;/p&gt;




&lt;p&gt;selanjutnya kita akan baca datanya dimana note user itu hanya bisa membaca note yang dia buat. read note sebelumnya in bisa membaca semua note yang ada, &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RV0kry6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ydbunpkv0aq4r8fkd32p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RV0kry6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ydbunpkv0aq4r8fkd32p.png" alt="Image notes read" width="623" height="272"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//notes_controllers.js

import { request, response } from "express"
import db from "../../prisma/connection"

// read notes
export const notes_read = async (req = request, res = response) =&amp;gt; {
    try {
        const data = await req.body
        const result = await db.notes.findMany({
            where: {
                user_id : data.user_id
            }
        })
        res.status(200).json({
            success: true,
            notes: result
        })
    } catch (error) {
        res.status(500).json({
            success: false,
            error: error.message
        })
    }
}

// create note
export const notes_create = async (req = request, res = response) =&amp;gt; {
    try {
        const data = await req.body
        console.info(data)
        const createNote = await db.notes.create({
            data: {
                title : data.title,
                content : data.content,
                user_id : data.user_id
            }
        })
        res.status(201).json({
            success: true,
            message: "Berhasil menambahkan note ke database",
            note: createNote
        })
    } catch (error) {
        res.status(500).json({
            success: false,
            error: error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mN547TlJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k61iggo4hsrbah7kbjts.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mN547TlJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k61iggo4hsrbah7kbjts.png" alt="Image note read" width="515" height="154"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//test.rest


### USER REGISTER
POST http://localhost:8000/user/register
Content-Type: application/json

{
    "email":"andi3@andi.com",
    "password": "cobapassword"
}

### USER LOGIN

POST http://localhost:8000/user/login
Content-Type: application/json

{
    "email":"andi3@andi.com",
    "password": "cobapassword"
}

### NOTE CREATE

POST http://localhost:8000/notes/create
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NCwiZW1haWwiOiJhbmRpM0BhbmRpLmNvbSIsImlhdCI6MTY3Mjk3OTU1M30.EE_pXrJpClcwz7fzO0jL37orfXsHXalyCP3BGtlIvok

{
    "title":"ini judul saya",
    "content": "ini content saya "
}

### NOTE READ
GET http://localhost:8000/notes/read
Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kalau seperti ini maka akan bisa membaca semua note yang sudah dibuat oleh semua user, &lt;/p&gt;

&lt;p&gt;register&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dsjfp-M1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v681e2urd6vtrirlelo5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dsjfp-M1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v681e2urd6vtrirlelo5.gif" alt="Image register" width="880" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;login &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V2fLPjV6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4kmk1aicxlyygwfkx6rn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V2fLPjV6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4kmk1aicxlyygwfkx6rn.gif" alt="Image login" width="880" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create note user 6&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z-nxhi89--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/53dduwnpvm5tjykr3dzg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z-nxhi89--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/53dduwnpvm5tjykr3dzg.gif" alt="Image note" width="880" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read note&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3IHzPxq4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iwkum4dxg592suhbwyzy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3IHzPxq4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iwkum4dxg592suhbwyzy.gif" alt="Image note" width="880" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;cuman yang kita baca disini adalah semua note, sekarang kita pisahkan dengan middleware, kita notes_routes.js&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZrsyPP3I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eemc8gdcpyblirptrm03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZrsyPP3I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eemc8gdcpyblirptrm03.png" alt="Image mdw" width="789" height="93"&gt;&lt;/a&gt;&lt;br&gt;
3&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//notes_routes.js

import express from "express"
import { notes_create, notes_read } from "../controllers/notes_controllers"
import user_mdw from "../middleware/user_mdw"

const notes_routes = express.Router()

// create 
notes_routes.post("/notes/create", user_mdw, notes_create)

// read 
notes_routes.get("/notes/read", user_mdw, notes_read)

export default notes_routes

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;lanjut kita ke test.rest lagi untuk membaca note,  harusnya sekarang sudah tidak bisa lagi di akses, kecuali memasukkan token user loginnya.&lt;/p&gt;

&lt;p&gt;error tidak bisa membaca note &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yAjnheII--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/frb3rgv86axl1n5aonzk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yAjnheII--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/frb3rgv86axl1n5aonzk.gif" alt="Image author" width="880" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sekarang kita sudah bisa akses note yang kita buat tadi. kita baru membuat satu note.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ugl3rKpC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vgvo0hsgtzq18quuokt4.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ugl3rKpC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vgvo0hsgtzq18quuokt4.gif" alt="Image note author" width="880" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/andiks2018/JvalleyExpress-jwt2restClient.git"&gt;github repo&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Express js jwt</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Mon, 02 Jan 2023 17:13:24 +0000</pubDate>
      <link>https://dev.to/andiismail/express-js-jwt-1k2</link>
      <guid>https://dev.to/andiismail/express-js-jwt-1k2</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir express_jwt
npm init -y //akan menghasilkan package.json
npm install express dotenv prisma jsonwebtoken


npm install -D @babel/core @babel/node @babel/preset-env //akan menghasilkan node modules

npx prisma init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6kekkagrt3ajkq6njuih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6kekkagrt3ajkq6njuih.png" alt="Image vs code" width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;buat file .babelrc&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.babelrc

{
    "presets": ["@babel/preset-env"]
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tambahkan dev&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//package.json

{
  "name": "express_jwt",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;amp;&amp;amp; exit 1",
    "dev":"nodemon --exec babel-node ./src/index.js" //tambahkan ini 
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "jsonwebtoken": "^9.0.0",
    "prisma": "^4.8.0"
  },
  "devDependencies": {
    "@babel/core": "^7.20.7",
    "@babel/node": "^7.20.7",
    "@babel/preset-env": "^7.20.2"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya buat folder sr, kemudian file index.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// src/index.js

import express from "express"
import env from "dotenv"
env.config()

const app = express()

app.listen(8000, ()=&amp;gt;{
    console.info("server berjalan di port 8000")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;coba jalankan server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlw7w3feru5qbd83v737.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlw7w3feru5qbd83v737.png" alt="Image npm run dev" width="707" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;selanjutnya kita ke env, kita akan ganti postgre&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//env

DATABASE_URL="file:./db.sqlite"
PORT=8000

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sekarang ke schema prisma&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// schem.prisma

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

model Users {
  id        Int     @id @default(autoincrement())
  email     String  @unique
  password  String  
  createdAt DateTime  @default(now())
  updatedAt DateTime  @updatedAt
}

model Notes {
  id          Int @id   @default(autoincrement())
  title       String
  content     String
  author      String
  createdAt   DateTime   @default(now())
  updatedAt   DateTime  @updatedAt
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;port 8000 kita nonaktifkan dulu,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx prisma db push //database is now sync with prisma

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;buat file baru di prisma&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//connetions.js

import {PrismaClient} from "@prisma/client"
const db = new PrismaClient()
export default db

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita buat folder controllers didalam folder src&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_controller.js

import { request, response } from "express";
import db from "../../prisma/connection";

//create user

export const user_register = async(req =request, res= response)=&amp;gt;{
    try{

        //membaca request body
        const data = await req.body

        //tulis data dari body ke database
        const result = await db.users.create({
            data : data
        })

        //kembalikan rsponse json 
        res.status(201).json({
            success: true,
            message : "user berhasil di tambahkan ke database "
        })

    } catch(error){
        res.status(500).json({
            success : false,
            error : error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita buat routenya&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//routes/user_routes.js

import express from "express"
import { user_register } from "../controllers/user_controllers"
const user_routes = express.Router()

//userRegister
user_routes.post("/user/register", user_register)

export default user_routes

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita kembali lagi ke index.js untuk menambahkan middleware dan routes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//index.js

import express from "express"
import env from "dotenv"
import user_routes from "./routes/user_routes"
env.config()

const app = express()

//middleware
app.use(express.urlencoded({extended: false}))
app.use(express.json())


//routes
app.use(user_routes)


app.listen(8000, ()=&amp;gt;{
    console.info("server berjalan di port 8000")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;coba hentikan server port 8000 kemudian hidupkan kembali seharusnya tidak ada error.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ewxvaq3torhi8crragk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ewxvaq3torhi8crragk.png" alt="Image berjalan 8000" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kita akan coba test model yang sudah kita buat dengan post man : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new connection&lt;/li&gt;
&lt;li&gt;buat 2 folder users dan notes&lt;/li&gt;
&lt;li&gt;add request ganti namanya dengan user register&lt;/li&gt;
&lt;li&gt;masukkan link &lt;a href="http://localhost:8000/user/register" rel="noopener noreferrer"&gt;http://localhost:8000/user/register&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;lanjut ke body : ganti jadi raw, json &lt;/li&gt;
&lt;li&gt;kemudian send request, rresponse nya berada disamping kanan, bernilai true&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6ca2zj44xnt61w93h78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6ca2zj44xnt61w93h78.png" alt="Image postman hit" width="800" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0pgr67kcyerbej8bg6y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0pgr67kcyerbej8bg6y.png" alt="Image login flow" width="697" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;konsep jwt&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynkadfji7jshqz2ou6it.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynkadfji7jshqz2ou6it.png" alt="Image pengertian jwt" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;package library yang kita gunakan &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ijkplfvgkyu91ehvh9w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ijkplfvgkyu91ehvh9w.png" alt="Image json webtoken" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kita import json webtoken di user controller &lt;br&gt;
kita generate dulu secret password di sha256&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbq7fyoksw1ywnc7yr51t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbq7fyoksw1ywnc7yr51t.png" alt="Image sha256" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;copy password kita ke env&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// .env

DATABASE_URL="file:./db.sqlite"
PORT=8000
SECRET_KEY = "822311a345980e7a0a2cdb7fd8c51d4c0fe302f671e619386f740b19d9ffa243" //paste disini 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;lanjut ke user_controller import env, generated token dan kembalikan respon token&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_controllers.js
import { request, response } from "express";
import db from "../../prisma/connection";
import jwt from 'jsonwebtoken'
import env from 'dotenv'
env.config()

//create user
export const user_register = async(req =request, res= response)=&amp;gt;{
    try{

        //membaca request body
        const data = await req.body

        //tulis data dari body ke database
        const result = await db.users.create({
            data : data
        })


        //generated token 
        const token = jwt.sign({
            id : result.id,
            email : result.email
        }, process.env.SECRET_KEY)

        //kembalikan response json 
        res.status(201).json({
            success: true,
            message : "user berhasil di tambahkan ke database ",
            token : token
        })
    } catch(error){
        res.status(500).json({
            success : false,
            error : error.message
        })
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita ke postman lagi unutk coba hit , jangan lupa untuk mengganti emailnya karena unique jadi gak boleh sma adengan email sebelumnya.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xh9af9zz6p03a3ntd2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xh9af9zz6p03a3ntd2c.png" alt="Image hit kedua dengan jwt" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;berhasil menambahkan email dan password baru.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp1g2famu7p6rrx0t08wy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp1g2famu7p6rrx0t08wy.png" alt="Image jwt io" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kalau kita copy token kita yang ada di post man , kemudian kita pastekan ke jwt.io ternyata id email kita masih terbaca, makanya kita tidak bisa menyimpan password disini, kita simpannya di env, dengan nama secret_key&lt;/p&gt;

&lt;p&gt;lanjut ke nottes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// src/controllers/notes_controllers.js

import {request, response} from "express"
import db from "../../prisma/connection"

//read notes
export const notes_read = async (req=request, res = response)=&amp;gt;{
    try{
        const result = await db.notes.findMany()
        res.status(200).json({
            success : true,
            notes : result
        })

    }catch(error){
        res.status(500).json({
            success : false,
            error : error.message
        })
    }
}

//create note
export  const notes_create = async (req=request, res = response)=&amp;gt;{
    try {
        const data = await req.body
        const createNote = await db.notes.create({
            data: data
        })
        res.status(201).json({
            success : true,
            message : "berhasil menambahkan note ke database",
            note : createNote
        })
    }catch(error){
        res.status(500).json({
            success : false,
            error : error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selesai membuat controller selanjutnya kita akan buat routesnya&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//notes_routes.js

import express from 'express'
import { notes_create, notes_read } from '../controllers/notes_controllers'

const notes_routes = express.Router()

//create
notes_routes.post("/notes/create", notes_create)

//read
notes_routes.get("/notes/read", notes_read)

export default notes_routes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kemudian kita panggil di index js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//index.js

import express from "express"
import env from "dotenv"
import user_routes from "./routes/user_routes"
import notes_routes from "./routes/notes_routes"
env.config()

const app = express()

//middleware
app.use(express.urlencoded({extended: false}))
app.use(express.json())

//routes
app.use(user_routes)
app.use(notes_routes) //tambahkan ini 

app.listen(8000, ()=&amp;gt;{
    console.info("server berjalan di port 8000")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;coba kita hit di postman&lt;br&gt;
sebelumnya aku ada error di model notes, tertulis athoe, harusnya author dan ketika dirubah dia harus di db push ulang jangan lupa control save. &lt;/p&gt;

&lt;p&gt;sekarang kita ke post man, sama seperti user register, kemudian kita hit dan berhasil&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftexg22j38l1r8ti2t6p9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftexg22j38l1r8ti2t6p9.png" alt="Image berhasil create notes" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;untuk raednya &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrkc010u78629880mbku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrkc010u78629880mbku.png" alt="Image read notes" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;selanjutnya kita butuh middleware untuk membatasi siapa saja yang bisa membuat dan read artikel. kita buat folder middleware.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// middleware/user_mdw.js

import {request, response} from 'express'
import jwt from 'jsonwebtoken'
import env from 'dotenv'
env.config()

const user_mdw = async (req=request, res= response, next)=&amp;gt;{

    //coba cek apaakah ada authorization
    const authorization = await req.headers.authorization

    if (!authorization){
        return res.status(401).json({
            success : false,
            message : "authorization tidak di temukan "
        })
    }
    const token = await authorization.split(" ")[1] //hati hati diantara spasi tanda petik  ada spasi

    //validation token 
    const verify = await jwt.verify(token, process.env.SECRET_KEY)

    if(!verify){
        return res.status(401).json({
            success : false,
            message : "Token tidak terverifikasi "
        })
    }

    next()
}

export default user_mdw

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;lanjut ke notes_routes.js, untuk menambahkan middlewarenya&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//notes_routes.js

import express from 'express'
import { notes_create, notes_read } from '../controllers/notes_controllers'
import user_mdw from '../middleware/user_mdw'


const notes_routes = express.Router()

//create
notes_routes.post("/notes/create", user_mdw, notes_create) //tambahkan disini 

//read
notes_routes.get("/notes/read", notes_read)

export default notes_routes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1quz6tysq1wt0vc4xfnd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1quz6tysq1wt0vc4xfnd.png" alt="Image false" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;authorization tidak ditemukan karena belum login.&lt;br&gt;
kita pinjma token yang sudah kita buat sebelumnya.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxo5ms951pxv4p66gaxun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxo5ms951pxv4p66gaxun.png" alt="Image auth" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fym26qun7oad3kr5j4sqz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fym26qun7oad3kr5j4sqz.gif" alt="Image authorization" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;berhasil ya, berarti sekarang kita sudah berhasil melakukan validasi user, mereka harus memiliki token dulu baru bisa akses create data.&lt;/p&gt;

&lt;p&gt;di user_mdw.js kita tambahkan try and catch , sehingga kita ada error tidak error server,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_mdw.js

import { request, response } from "express";
import jwt from "jsonwebtoken";
import env from "dotenv";
env.config();

const user_mdw = async (req = request, res = response, next) =&amp;gt; {
    try {
          //coba cek apaakah ada authorization
  const authorization = await req.headers.authorization;

  if (!authorization) {
    return res.status(401).json({
      success: false,
      message: "authorization tidak di temukan ",
    });
  }
  const token = await authorization.split(" ")[1];

  //validation token
  const verify = await jwt.verify(token, process.env.SECRET_KEY);

  if (!verify) {
    return res.status(401).json({
      success: false,
      message: "Token tidak terverifikasi ",
    });
  }

  next();
    } catch (error) {
        res.status(401).json({
            success : false,
            error : error.message
        })
    }
};

export default user_mdw;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/andiks2018/JvalleyExpress-jwtPostman.git" rel="noopener noreferrer"&gt;repo github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>tailwindcss</category>
    </item>
    <item>
      <title>Ghost cms javascript</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Thu, 22 Dec 2022 00:43:23 +0000</pubDate>
      <link>https://dev.to/andiismail/ghost-cms-javascript-1859</link>
      <guid>https://dev.to/andiismail/ghost-cms-javascript-1859</guid>
      <description>&lt;p&gt;install local &lt;/p&gt;

&lt;p&gt;masuk menu developer &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--324MZRIs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nokcm51eso7vef8rqm7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--324MZRIs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nokcm51eso7vef8rqm7s.png" alt="Image ghost developer" width="880" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--atODCJGE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/klukd3ggu4x37lek78lz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--atODCJGE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/klukd3ggu4x37lek78lz.png" alt="Image node 16 support" width="880" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qRV2fw7a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hjkx1iceelpylabhamch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qRV2fw7a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hjkx1iceelpylabhamch.png" alt="Image sudah versi 18" width="880" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kita harus berpindah dari 18 mundur ke 16 node version, cara nvm download installernya instal ok.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wFmGEype--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2xrqlg10hk3beg7kkdzz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wFmGEype--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2xrqlg10hk3beg7kkdzz.png" alt="Image petani kode" width="880" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wgRw0wFw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oq77t2rfu3w4d022v262.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wgRw0wFw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oq77t2rfu3w4d022v262.png" alt="Image nvm github" width="880" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--90SlAt-H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zb8h09yy40yeqplbekjn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--90SlAt-H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zb8h09yy40yeqplbekjn.png" alt="Image nvm use v16" width="840" height="748"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir ghost
npm install ghost-cli@latest -g
ghost install local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_viNhJh3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xzw3kbb0gesxzgze7li1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_viNhJh3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xzw3kbb0gesxzgze7li1.png" alt="Image websitenya jadi" width="880" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;jalankan server dengan perintah&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ghost start
`http://localhost:2368/ghost`

ghost stop
ghost help
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Express js upload file Multer js</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Tue, 20 Dec 2022 21:33:25 +0000</pubDate>
      <link>https://dev.to/andiismail/express-js-upload-file-multer-js-2mal</link>
      <guid>https://dev.to/andiismail/express-js-upload-file-multer-js-2mal</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir express_upload
cd express_upload
npm init -y

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qsnvqerm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wvnuc2z8y0g4ws4m55bp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qsnvqerm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wvnuc2z8y0g4ws4m55bp.png" alt="Image node js" width="880" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kita butuh multer&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZqiG8JoS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t41ttl0orvghvlo6xm24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZqiG8JoS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t41ttl0orvghvlo6xm24.png" alt="Image multer" width="880" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install express dotenv prisma multer
npx prisma init
npm i -D @babel/core @babel/node @babel/preset-env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kita akan gunakan post man,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W40mrtiW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9xt3e8gt1k54dt8mk70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W40mrtiW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9xt3e8gt1k54dt8mk70.png" alt="Image postman" width="880" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kita buat file .babelrc&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.bablerc

{
    "presets": ["@babel/preset-env"]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita akan buat folder src&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9YQtWqKG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m9kx0ph1sdg2yaz55evt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9YQtWqKG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m9kx0ph1sdg2yaz55evt.png" alt="Image src" width="880" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;selanjutnya kita akan hapus test diganti dengan dev&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//package.json

{
  "name": "express_upload",
  "version": "1.0.0",
  "description": "",
  "main": "/src/index.js",
  "scripts": {
    "dev": "nodemon --exec babel-node ./src/index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "multer": "^1.4.5-lts.1",
    "prisma": "^4.7.1"
  },
  "devDependencies": {
    "@babel/core": "^7.20.5",
    "@babel/node": "^7.20.5",
    "@babel/preset-env": "^7.20.2"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;masuk ke controller buat file upload_controller&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//upload_controller.js

import {request, response} from "express"

const upload_create = async (req = request, res = response)=&amp;gt;{
    try{
        const data = await req.body
        return res.status(201).json({
            success : true,
            data : data
        })
    }catch(err){
        return res.status(500).json({
            success : false,
            error : err.message
        })
    }
}
export default upload_create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita akan buat upload_mdw.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//upload_mdw.js

import multer from "multer";

const storage =multer.diskStorage({
    destination : (req, file, cb)=&amp;gt;{
        cb(null, './public/uploads')
    },
    filename : (req, file, cb)=&amp;gt;{
        cb (null, 'test.png')
    }
})

const upload_mdw = multer({storage : storage})

export default upload_mdw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita akan buat rootnya&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//upload_route.js

import express from 'express'
import upload_create from '../controllers/upload_controller'
import upload_mdw from '../middleware/upload_mdw'

const upload_route = express.Router()

//create upload
upload_route.post("/api/upload/create", upload_mdw.single('file'), upload_create)

export default upload_route
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tambahkan 8000&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.env

DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
PORT=8000

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita ke index.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//index.js

import express from 'express'
import env from 'dotenv'
import upload_route from './routes/upload_route'
env.config()

const app = express()
const {PORT} =process.env

app.use(express.static("../public"))
app.use(express.json())

app.use(upload_route)

app.listen(PORT, ()=&amp;gt;{
    console.info('server running...')
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;jalankan aplikasinya&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o5wfH-7q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jzautnph80qcpi9qa8yn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o5wfH-7q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jzautnph80qcpi9qa8yn.png" alt="Image server run" width="880" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;selanjutnya kita akan ke postman, buat create new collection , upload folder, add request, post, lanjut ke body, klik rubah jadi form-data, uncentang description, key isi dengan file, kemudian valuenya, select files&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZyO3vu26--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sa7g5nviehysnvsvvh51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZyO3vu26--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sa7g5nviehysnvsvvh51.png" alt="Image postman" width="880" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;berhasil menampilkan file upload, selanjutnya kita akan buat 2 folder public/uploads kosongan nanti akan terisi ketika kitta klik upload dari post man &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T58YwH7V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/esrstbhzdqsv8bjo45zt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T58YwH7V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/esrstbhzdqsv8bjo45zt.png" alt="Image uploads" width="880" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kenapa nama file nya puploads karena folder yang kita buat nama filesnya adalah ./public/uploads ok, sekarang kita ke post man &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YPu4Zm87--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9z4barl20n9yd6rxf36o.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YPu4Zm87--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9z4barl20n9yd6rxf36o.gif" alt="Image success" width="880" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sekarang file uploads terisi test.png.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dA_IODbm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/332z9au4s2g1xrwsj8qw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dA_IODbm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/332z9au4s2g1xrwsj8qw.png" alt="Image test.png" width="880" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;dan kalau kita upload lagi maka akan menghasilkan test.png lagi dan niban data yang lama.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ushnHNtQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zum819z8lack1ruszquj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ushnHNtQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zum819z8lack1ruszquj.png" alt="Image regis" width="880" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kita ganti 'test.png' menjadi original name&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//upload_mdw.js

import multer from "multer";
//buat storagenya
const storage =multer.diskStorage({
    destination : (req, file, cb)=&amp;gt;{
        cb(null, './public/uploads')
    },
    filename : (req, file, cb)=&amp;gt;{
        cb (null, file.originalname) //ganti file ini
    }
})
const upload_mdw = multer({storage : storage})
export default upload_mdw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n6V7fpVE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9khlxpm9zdeam7mnbazy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n6V7fpVE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9khlxpm9zdeam7mnbazy.png" alt="Image blog1" width="880" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sekarang kita sudah bisa upload file sesuai dengan nama file aslinya.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/andiks2018/jvalleyExpress-uploadMulterJs.git"&gt;git repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Terima kasih.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Express postman</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Mon, 12 Dec 2022 16:49:20 +0000</pubDate>
      <link>https://dev.to/andiismail/express-postman-gba</link>
      <guid>https://dev.to/andiismail/express-postman-gba</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpffyagnjlch94yiue0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpffyagnjlch94yiue0f.png" alt="Image postman" width="800" height="429"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir express_sample_api
npm init -y
npm install express dotenv prisma
npm install -D @babel/core @babel/node @babel/preset-env @faker-js/faker

npx prisma init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita setup babel  butuh file .babelrc&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.babelrc

{
    "presets": ["@babel/preset-env"]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//package.json

{
  "name": "express_sample_api",
  "version": "1.0.0",
  "description": "",
  "main": "/src/index.js",
  "scripts": {
    "dev": "nodemon --exec babel-node ./src/index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "prisma": "^4.7.1"
  },
  "devDependencies": {
    "@babel/core": "^7.20.5",
    "@babel/node": "^7.20.5",
    "@babel/preset-env": "^7.20.2",
    "@faker-js/faker": "^7.6.0"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.env

DATABASE_URL="file:./db.sqlite"
PORT=9000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//shema.prisma

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

model Notes{
  id          Int       @id @default(autoincrement())
  title       String    
  content     String
  author      String
  createdAt   DateTime  @default(now())
  updatedAt   DateTime  @updatedAt
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//package.json

{
  "name": "express_sample_api",
  "version": "1.0.0",
  "description": "",
  "main": "/src/index.js",
  "scripts": {
    "dev": "nodemon --exec babel-node ./src/index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "prisma": "^4.7.1"
  },
  "devDependencies": {
    "@babel/core": "^7.20.5",
    "@babel/node": "^7.20.5",
    "@babel/preset-env": "^7.20.2",
    "@faker-js/faker": "^7.6.0"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita push modelnya ke database&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx prisma db push&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;selanjutnya kita buat file connection&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//connection.js

import {PrismaClient} from "@prisma/client"
const db = new PrismaClient()

export default db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita baut create dan read data&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//note_controllers.js

import { request, response } from "express";
import db from "../../prisma/connection";

//create note 
export const note_create = async (req=request, res= response)=&amp;gt;{
    try{
        const data = await req.body
        const createNote = await db.notes.create({
            data : {
                title : data.title,
                content : data.content,
                author : data.author,
            }
        })
        return res.status(201).json({
            success :true,
            data : createNote
        })
    }catch(error){
        return res.status(500).json({
            success : false,
            error : error.message
        })
    }
}

//read note
export const note_read = async (req=request, res=response)=&amp;gt;{
    try{
        const {page= 1, limit = 10}= await req.query
        const skip = (page-1)* limit
        const result = await db.notes.findMany({
            skip : skip,
            take : parseInt(limit)

        })

        const totalResult = await db.notes.count()
        return res.status(200).json({
            success : true,
            current_page : parseInt(page),
            total_page : Math.ceil(totalResult/limit),
            data : result
        })
    }catch(error){
        return res.status(500).json({
            success : false,
            error : error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita ke routes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//note_routes

import express from 'express'
import { note_create, note_read } from '../controllers/note_controllers'

const note_routes = express.Router()

//create note
note_routes.post("/api/note/create", note_create)

//read note
note_routes.get("/api/notes/read", note_read)

export default note_routes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//index.js

import express from 'express'
import env from 'dotenv'
import note_routes from './routes/note_routes'
env.config()

//environtment variable
const {PORT} = process.env
const app=express()

//mdw
app.use(express.json())

//routes
app.use(note_routes)

//listener
app.listen(PORT, ()=&amp;gt;{
    console.info("server beckend berjalan...")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;jalankan server &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdnqdfmlsfm58d4rl7fn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdnqdfmlsfm58d4rl7fn.png" alt="Image server berjalan" width="800" height="257"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//note_routes

import express from 'express'
import { note_create, note_read } from '../controllers/note_controllers'

const note_routes = express.Router()

//create note
note_routes.post("/api/note/create", note_create)

//read note
note_routes.get("/api/notes/read", note_read)

export default note_routes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;create data&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh1pau2e07b9nludfh2j7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh1pau2e07b9nludfh2j7.png" alt="Image create" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;read data di hit &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5842mv4ktltiyc1a1sh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5842mv4ktltiyc1a1sh.png" alt="Image read" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sekarang kita akan mneggunakan post man&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;create new collection ganti namanya
add request NOTE CREATE
kita lanjut ke body
jangan lupa save, di body tulis

{
    "title": "ini title",
    "content": "ini content",
    "author": "andiismail"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffqtp6g3enrtybc5g67k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffqtp6g3enrtybc5g67k.png" alt="Image postman" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;add request lagi sekarang kita bikin untuk&lt;br&gt;
read notesnya&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtp8khzx41grvtf4793k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtp8khzx41grvtf4793k.png" alt="Image read postman" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;selanjutnya kita buat seedernya pakai data fakerjs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxsv9p6kxjybls5iypofl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxsv9p6kxjybls5iypofl.png" alt="Image fakerjs" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zueb10hsrq6eovsvrrd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zueb10hsrq6eovsvrrd.png" alt="Image paragraph" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//notes_seed.js

import {faker} from "@faker-js/faker"

const note_seed = ()=&amp;gt;{
    const fake_title = faker.definitions.title
    const fake_content = faker.lorem.paragraph()
    const fake_author = faker.internet.userName()

    console.log({fake_title, fake_content, fake_author})
}

note_seed()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya buat pemanggil seedernya di package.json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//package.json

{
  "name": "express_sample_api",
  "version": "1.0.0",
  "description": "",
  "main": "/src/index.js",
  "scripts": {
    "dev": "nodemon --exec babel-node ./src/index.js",
    "notes_seed": "babel-node ./src/seeds/notes_seed.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@prisma/client": "^4.7.1",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "prisma": "^4.7.1"
  },
  "devDependencies": {
    "@babel/core": "^7.20.5",
    "@babel/node": "^7.20.5",
    "@babel/preset-env": "^7.20.2",
    "@faker-js/faker": "^7.6.0"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya jalankan servernya &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run notes_seed&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4cwywct3p7nbaoqq1ql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4cwywct3p7nbaoqq1ql.png" alt="Image tampil namanya" width="632" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwh31fxo3krkljx62yvs9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwh31fxo3krkljx62yvs9.png" alt="Image 1 data" width="800" height="164"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//notes_seed.js

import {faker} from "@faker-js/faker"
import db from "../../prisma/connection"
const note_seed = ()=&amp;gt;{
    const fake_title = faker.definitions.title
    const fake_content = faker.lorem.paragraph()
    const fake_author = faker.internet.userName()

    //console.log({fake_title, fake_content, fake_author})
    db.notes.create({
        data : {
            title : fake_title,
            content : fake_content,
            author : fake_author
        }
    })
        .then(res=&amp;gt;{
            console.info(`Dibuat notes dengan author ${fake_author}`)
        })
        .catch(err=&amp;gt;{console.error(err.message)})
}

//note_seed()
for (let i = 0; i&amp;lt;=100; i++){
    note_seed()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;jalankan &lt;code&gt;npm run notes_seed&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh57hhdd4nolx7ymbpgqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh57hhdd4nolx7ymbpgqv.png" alt="Image berhasil 100nama" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sekarang kita jalanakn server 9000 &lt;br&gt;
&lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8ciwyvuy0vie2vgy3ha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8ciwyvuy0vie2vgy3ha.png" alt="Image menampilkan 10 data" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;untuk mendapatkan data yang terbaru, kita tambahkan order by dari findMany() dan tambahkan juga total data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//note_controllers.js

import { request, response } from "express";
import db from "../../prisma/connection";

//create note 
export const note_create = async (req=request, res= response)=&amp;gt;{
    try{
        const data = await req.body
        const createNote = await db.notes.create({
            data : {
                title : data.title,
                content : data.content,
                author : data.author
            }
        })
        return res.status(201).json({
            success :true,
            data : createNote
        })
    }catch(error){
        return res.status(500).json({
            success : false,
            error : error.message
        })
    }
}

//read note
export const note_read = async (req=request, res=response)=&amp;gt;{
    try{
        const {page= 1, limit = 10}= await req.query
        const skip = (page-1)* limit
        const result = await db.notes.findMany({
            skip : skip,
            take : parseInt(limit),
            orderBy : {
                id :"desc" // a-z "desc"
            }
        })

        const totalResult = await db.notes.count()
        return res.status(200).json({
            success : true,
            current_page : parseInt(page),
            total_page : Math.ceil(totalResult/limit),
            total_data : totalResult,
            data : result
        })
    }catch(error){
        return res.status(500).json({
            success : false,
            error : error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdkxbp60xo3qgfkxre21.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdkxbp60xo3qgfkxre21.png" alt="Image pakai data terbaru" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F837l8fwee3ijwntwz8z5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F837l8fwee3ijwntwz8z5.png" alt="Image dsc" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frvebqxtg3dd7dh8tt1g1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frvebqxtg3dd7dh8tt1g1.png" alt="Image asc" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/andiks2018/JvalleyExpress-apiPostman.git" rel="noopener noreferrer"&gt;github repo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>welcome</category>
    </item>
    <item>
      <title>Express js pagination dengan prisma</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Sun, 11 Dec 2022 14:11:04 +0000</pubDate>
      <link>https://dev.to/andiismail/express-js-pagination-dengan-prisma-13bi</link>
      <guid>https://dev.to/andiismail/express-js-pagination-dengan-prisma-13bi</guid>
      <description>&lt;p&gt;Express pagination lanjutan penabahasan sebelumnya, &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/andiks2018/JvalleyExpress-SeddFakerJs.git" rel="noopener noreferrer"&gt;github repo sebelumnya disini&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;node module dan database tidak disertakan di github, jadi setelah&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install
npx prisma db push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftbva9hbkqkgmbpplrqq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftbva9hbkqkgmbpplrqq0.png" alt="Image error env" width="630" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;error environment tidak ditemukan, kita harus buat dulu envnya.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.env

DATABASE_URL = "file:./db.sqlite"
PORT= 9000

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;coba kita jalankan kembali &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx prisma db push&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0f5rr89k4p3gpqcyy8sh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0f5rr89k4p3gpqcyy8sh.png" alt="Image berhasil clone" width="611" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sekarang kita jalankan server &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1u2o92wtmhjm6p99wh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1u2o92wtmhjm6p99wh1.png" alt="Image run dev" width="614" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;server sudah berhasil berjalan...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhci63j6ohaa2joiow6u.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhci63j6ohaa2joiow6u.gif" alt="Image ganti" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kalau kita hit kembali dengan data yang sama maka akan error karena username dan email uniq.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F164blyqtm88k8pc4sca6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F164blyqtm88k8pc4sca6.png" alt="Image error unique" width="800" height="542"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//package.json

{
  "name": "express_faker",
  "version": "1.0.0",
  "description": "",
  "main": "/src/index.js",
  "scripts": {
    "dev": "nodemon --exec babel-node ./src/index.js",
    "users_seed" : "babel-node ./src/seeds/users_seed.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@prisma/client": "^4.7.1",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "prisma": "^4.7.1"
  },
  "devDependencies": {
    "@babel/core": "^7.20.5",
    "@babel/node": "^7.20.5",
    "@babel/preset-env": "^7.20.2",
    "@faker-js/faker": "^7.6.0"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dipackage json kita sudah tambahkan user_seed untuk menambahkan 100 data faker.&lt;br&gt;
matikan servernya dan ketikkan &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run users_seed&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd2rlhn1yd4yzs4tfdeqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd2rlhn1yd4yzs4tfdeqt.png" alt="Image 100data" width="611" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sekarang dua server yang berjalan.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run users_seed
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kalau kita hit di &lt;code&gt;tester.rest&lt;/code&gt; maka akan produksi 100 data plus data input yang kita lakukan sebelumnya, oleh karenaya kita akan membuat pagination untuk memudah kinerja load data. kita akan ke controller user fokus pada user read&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5v4lrvg7n7bzcls8uz4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5v4lrvg7n7bzcls8uz4e.png" alt="Image send request" width="800" height="665"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;di findmany kasih objek &lt;code&gt;take=10&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_controller.js

import db from "../../prisma/connection"
import { request, response } from "express"

// create user
export const user_create = async (req = request, res = response) =&amp;gt; {
    try {
        const data = await req.body
        const createUser = await db.users.create({
            data: data
        })
        return res.status(201).json({
            success: true,
            message: "User berhasil di buat"
        })
    } catch (error) {
        return res.status(500).json({
            success: false,
            error: error.message
        })
    }
}

// user read
export const user_read = async (req = request, res = response) =&amp;gt; {
    try {
        const result = await db.users.findMany({
            take : 10 //tambahkan ini
        })
        return res.status(200).json({
            success: true,
            data: result
        })
    } catch (error) {
        return res.status(500).json({
            success: false,
            error: error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sekarang ke tester.rest kalau kita send request untuk read data, hasilya kita hanya akan melihat 10 data saja&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ty92tr4wfkdtc51d896.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ty92tr4wfkdtc51d896.png" alt="Image 10 data" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kalau kita kasih take 10 dan skip 10 maka akan menampilkan 10 data di setiap halaman nnya.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_controller.js

import db from "../../prisma/connection"
import { request, response } from "express"

// create user
export const user_create = async (req = request, res = response) =&amp;gt; {
    try {
        const data = await req.body
        const createUser = await db.users.create({
            data: data
        })
        return res.status(201).json({
            success: true,
            message: "User berhasil di buat"
        })
    } catch (error) {
        return res.status(500).json({
            success: false,
            error: error.message
        })
    }
}

// user read
export const user_read = async (req = request, res = response) =&amp;gt; {
    try {
        const result = await db.users.findMany({
            take : 10,
            skip:10

        })
        return res.status(200).json({
            success: true,
            data: result
        })
    } catch (error) {
        return res.status(500).json({
            success: false,
            error: error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Futl94q7v1mxdozk0gux3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Futl94q7v1mxdozk0gux3.png" alt="Image mulai dari 11" width="800" height="650"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;selanjutnya kita akan buat variable untuk page&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_controller.js

import db from "../../prisma/connection"
import { request, response } from "express"

// create user
export const user_create = async (req = request, res = response) =&amp;gt; {
    try {
        const data = await req.body
        const createUser = await db.users.create({
            data: data
        })
        return res.status(201).json({
            success: true,
            message: "User berhasil di buat"
        })
    } catch (error) {
        return res.status(500).json({
            success: false,
            error: error.message
        })
    }
}

// user read
export const user_read = async (req = request, res = response) =&amp;gt; {
    try {

        // let page =1
        // let limit = 10
        let {page=1, limit=10}= req.query //menghasilkan string
        let skip = (page-1) * limit
        const result = await db.users.findMany({
            //take : 10,
            take : parseInt(limit),
            //skip:10
            skip:skip

        })
        return res.status(200).json({
            success: true,
            data: result
        })
    } catch (error) {
        return res.status(500).json({
            success: false,
            error: error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sekarang coba kita hit, tanpa query kita sebelumnya sudah memberikan nilai default 1-10.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnrsjqkfwb1j6gy7ebr7u.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnrsjqkfwb1j6gy7ebr7u.gif" alt="Image 1-10" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp02qtoq37d4jtt42tdl3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp02qtoq37d4jtt42tdl3.gif" alt="Image 2-5" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;berhasil&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_controller.js

import db from "../../prisma/connection"
import { request, response } from "express"

// create user
export const user_create = async (req = request, res = response) =&amp;gt; {
    try {
        const data = await req.body
        const createUser = await db.users.create({
            data: data
        })
        return res.status(201).json({
            success: true,
            message: "User berhasil di buat"
        })
    } catch (error) {
        return res.status(500).json({
            success: false,
            error: error.message
        })
    }
}

// user read
export const user_read = async (req = request, res = response) =&amp;gt; {
    try {

        // let page =1
        // let limit = 10
        let {page=1, limit=10}= req.query //menghasilkan string
        let skip = (page-1) * limit
        const result = await db.users.findMany({
            //take : 10,
            take : parseInt(limit),
            //skip:10
            skip:skip
        })

        //informasi total data keseluruhan 
        const resultCount = await db.users.count()//integer jumlah total data user

        //generated total page
        const totalPage= Math.ceil(resultCount/limit)

        return res.status(200).json({
            success: true,
            current_page: page - 0, //ini -0 merubah menjadi integer
            total_page : totalPage,
            total_data : resultCount,
            data: result
        })
    } catch (error) {
        return res.status(500).json({
            success: false,
            error: error.message
        })
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;code di atas akan menmpikan jumlah page, current page, total data dan total page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5t2tc04xyrij7pwtnh1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5t2tc04xyrij7pwtnh1.gif" alt="Image page3" width="986" height="702"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;berhasil.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/andiks2018/JvalleyExpress-pagination.git" rel="noopener noreferrer"&gt;github repo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>Express js Faker js node js</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Sun, 11 Dec 2022 11:41:42 +0000</pubDate>
      <link>https://dev.to/andiismail/express-js-faker-js-node-js-1hc7</link>
      <guid>https://dev.to/andiismail/express-js-faker-js-node-js-1hc7</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir express_faker
cd express_faker
npm init -y //agar jawab otomatis
`enter`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dot env agar kita dapat menggunakan file file yang ada di .env Faker akan mengenarete data faker tapi realistic&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--icHPmmzc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d2kc5uyrdf3c5ptk8qns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--icHPmmzc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d2kc5uyrdf3c5ptk8qns.png" alt="Image faker js" width="880" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ElEvFgyT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2yjdw8cnna6febpua5vv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ElEvFgyT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2yjdw8cnna6febpua5vv.png" alt="Image prisma" width="880" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HoOzLPv3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/shsiyf7vw4pl1ql2u4nf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HoOzLPv3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/shsiyf7vw4pl1ql2u4nf.png" alt="Image express js" width="880" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---DQkacMW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hfi9csmxd5z1njj9l78x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---DQkacMW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hfi9csmxd5z1njj9l78x.png" alt="Image dotenv" width="880" height="459"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i @babel/core @babel/node @babel/preset-env @faker-js/faker 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx prisma init
code .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--owHq6xo4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m80lhi68g14c78o549jh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--owHq6xo4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m80lhi68g14c78o549jh.png" alt="Image file dan folder awal" width="880" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;buat file .babelrc&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.babelrc

{
    "presets": ["@babel/preset-env"]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;lanjut package jso kita hapus "test" dan&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//package.json

{
  "name": "express_faker",
  "version": "1.0.0",
  "description": "",
  "main": "./src/index.js",
  "scripts": {
    "dev": "nodemon --exec babel-node ./src/index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@babel/core": "^7.20.5",
    "@babel/node": "^7.20.5",
    "@babel/preset-env": "^7.20.2",
    "@faker-js/faker": "^7.6.0",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "prisma": "^4.7.1"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjuntya kita buka env&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.env

DATABASE_URL="file:./db.sqlite"
PORT=9000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya ke schema.prisma&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//schema.prisma

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}


model Users {
  id          Int       @id @default(autoincrement())
  username    String    @unique
  email       String    @unique
  password    String
  createdAt   DateTime  @default(now())
  updatedAt   DateTime  @updatedAt
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya buat folder src &amp;gt; controllers || routes || seeds || index.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx prisma db push //ototmatis generate prisma client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selesai. &lt;br&gt;
lanjut ke index.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//index.js

import express from 'express'
import dotenv from 'dotenv'
import user_routes from './routes/user_routes'
dotenv.config()

const {PORT} =process.env
const app = express()

//middleware
app.use(express.json())

//buat route
app.use(user_routes)
// app.get("/api/users", (req, res)=&amp;gt;{
//     res.send("berhasil konek...")
// })

//listener
app.listen(PORT, ()=&amp;gt;{
    console.info("server berhasil dijalankan...")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jDOLAsPP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2czy5p2i7itkfhj3lc50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jDOLAsPP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2czy5p2i7itkfhj3lc50.png" alt="Image cmd berhasil dijalankan" width="863" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2Yxa5ejR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgxdifjpmmx4v552msey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2Yxa5ejR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgxdifjpmmx4v552msey.png" alt="Image berhasil koneksi " width="880" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;buat file connection.js didalam folder prisma&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//connection.js

import { PrismaClient } from "@prisma/client"

const db = new PrismaClient()
export default db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita akan baut user_controller&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user.controller.js

import db from "../../prisma/connection"
import {request, response} from 'express'

//create user
export const user_create = async(req= request, res= response)=&amp;gt;{
    try{
        const data = await req.body
        const createUser = await db.users.create({
            data : data
        })
        return res.status(201).json({
            success: true,
            message : "user berhasil di buat"
        })
    }catch(error){
        return res.status(500).json({
            success : false,
            error : error.message
        })
    }
}

//user read
export const user_read = async(req= request, res= response)=&amp;gt;{
    try{
        const result = await db.users.findMany()
        return res.status(200).json({
            success: true,
            data : result
        })
    }catch(error){
        return res.status(500).json({
            success : false,
            error : error.message
        })
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//user_routes

import express from "express";
import { user_create, user_read } from "../controllers/user_controller";
const user_routes = express.Router()

//route create user
user_routes.post("/api/user/create", user_create)
user_routes.get("/api/users/read", user_read)

export default user_routes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita import ke index.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//index.js

import express from 'express'
import dotenv from 'dotenv'
import user_routes from './routes/user_routes'

dotenv.config()

const {PORT} =process.env
const app = express()

//middleware
app.use(express.json())

//buat route
app.use(user_routes)
// app.get("/api/users", (req, res)=&amp;gt;{
//     res.send("berhasil konek...")
// })

//listener
app.listen(PORT, ()=&amp;gt;{
    console.info("server berhasil dijalankan...")
})

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selanjutnya kita akan melakukan testing, yang kita gunakan adalah extension dari vs code dengan nama rest client, buat file tester.rest&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//tester.rest

### create data siswa

POST http://localhost:9000/api/user/create
Content-Type: application/json 

{
    "username" : "andiismail",
    "email" : "andi@andi.com",
    "password" : "Jl H. Midi Limo Depok"
}


### read all user
GET http://localhost:9000/api/users/read 
Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;perhatikan untuk untuk email dan password gak boleh sama, karena di auniq sehingga hanya bisa ngehit sekali saja di send request, untuk yang kedua gunakan email dan password yang beda.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NqIKtBkv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/twv5nsou758387ltlpuh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NqIKtBkv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/twv5nsou758387ltlpuh.png" alt="Image berhasil xcreate data user" width="863" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fh6HH432--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rbtg555aryeqtmztkmd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fh6HH432--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rbtg555aryeqtmztkmd.png" alt="Image read all user" width="880" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sekarang masuk ke pembahasan inti yaitu faker, dan disini kita butuh looping. Buat file users_seed.js di folder seeds&lt;br&gt;
seeds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//users_seed.js

import { faker } from "@faker-js/faker";

const fake_username = faker.name.fullName()
const fake_email = faker.internet.email()
const fake_password =faker.internet.password()

console.info({fake_username, fake_email, fake_password})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tambahkan di package.json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//package.json

{
  "name": "express_faker",
  "version": "1.0.0",
  "description": "",
  "main": "./src/index.js",
  "scripts": {
    "dev": "nodemon --exec babel-node ./src/index.js",
    "users_seed":"babel-node ./src/seeds/users_seed.js" //tambahkan yang ini
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@babel/core": "^7.20.5",
    "@babel/node": "^7.20.5",
    "@babel/preset-env": "^7.20.2",
    "@faker-js/faker": "^7.6.0",
    "@prisma/client": "^4.7.1",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "prisma": "^4.7.1"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;jalankan &lt;code&gt;npm run users_seed&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vu-P7qtV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gqd5kzwdaskh09l2cg5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vu-P7qtV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gqd5kzwdaskh09l2cg5w.png" alt="Image data 1 " width="880" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tnxlBi6V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y22ewxr2fm44b0xyp6m4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tnxlBi6V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y22ewxr2fm44b0xyp6m4.png" alt="Image data 2" width="880" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;berhasil mengenerate data name, email dan password.&lt;br&gt;
sekarangkita looping hanya username&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//users_seed.js

import { faker } from "@faker-js/faker";
import db from "../../prisma/connection";
// const fake_username = faker.internet.userName()
// const fake_email = faker.internet.email()
// const fake_password =faker.internet.password()
// console.info({fake_username, fake_email, fake_password})

const users_seed = ()=&amp;gt;{
    const fake_username = faker.internet.userName()
    const fake_email = faker.internet.email()
    const fake_password =faker.internet.password()

    db.users.create({
        data : {
            username : fake_username,
            email : fake_email,
            password : fake_password
        }
    })
    .then(res=&amp;gt;console.info(`username ${res.username} berhasil dibuat ...`))
    .catch(err=&amp;gt;console.error(err.message))
}
users_seed()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2g7jOmfS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xp4uh8he5r5f5sq01sl6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2g7jOmfS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xp4uh8he5r5f5sq01sl6.png" alt="Image hanya username" width="880" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;buat looping untuk 100 username fake&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//users_seed.js

import { faker } from "@faker-js/faker";
import db from "../../prisma/connection";
// const fake_username = faker.internet.userName()
// const fake_email = faker.internet.email()
// const fake_password =faker.internet.password()
// console.info({fake_username, fake_email, fake_password})

const users_seed = ()=&amp;gt;{
    const fake_username = faker.internet.userName()
    const fake_email = faker.internet.email()
    const fake_password =faker.internet.password()

    db.users.create({
        data : {
            username : fake_username,
            email : fake_email,
            password : fake_password
        }
    })
    .then(res=&amp;gt;console.info(`username ${res.username} berhasil dibuat ...`))
    .catch(err=&amp;gt;console.error(err.message))
}
// users_seed()
for (let i=0; i&amp;lt;100; i++){
    users_seed()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sekarang hidupkan kembali server nodemonnya dengan  &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zWgF__uU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/um32ycgl7k8ggo9pnrme.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zWgF__uU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/um32ycgl7k8ggo9pnrme.png" alt="Image 100 uername" width="615" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kalau kita read all user dengan hit send request maka akan terbaca 100 data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/andiks2018/JvalleyExpress-SeddFakerJs.git"&gt;github repo&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Express js model routes controller</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Tue, 06 Dec 2022 07:00:24 +0000</pubDate>
      <link>https://dev.to/andiismail/express-js-model-routes-controller-3pm2</link>
      <guid>https://dev.to/andiismail/express-js-model-routes-controller-3pm2</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir express_mrc
cd express_mrc
npm init -y
npm install express prisma dotenv
npm install -D @babel/core @babel/node @babel/preset-env
(babel hanya kita install di Develop saja, dikarenakan prisma masih menggunakan es-5 yang sintaksnya berbeda dengan react dan next js sudah menggunakan es-6)
npx prisma init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gqLntBCG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qduix0auutyud0wsbdyj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gqLntBCG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qduix0auutyud0wsbdyj.png" alt="Image folder awal" width="860" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ganti database url menggunakan sqlite dan port 9000&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.env

DATABASE_URL="file:./db.sqlite"
PORT=9000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ganti provider data resource db dengan sqlite dan buat model data siswa&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//schema.prisma

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

model DataSiswa {
  id                Int       @id @default(autoincrement())
  nama_lengkap      String    
  usia              Int
  alamat            String
  phone             String
  email             String    @unique
  nis               String
  createdAt         DateTime  @default(now())
  updatedAt         DateTime  @updatedAt
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;npx prisma db push&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;otomatis aka menjalankan generate, akan muncul  otomatis db sqlite file di folder prisma &lt;/p&gt;

&lt;p&gt;buat file baru connection.js yang berada di folder prisma&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//connection.js

import { PrismaClient } from "@prisma/client";
const db = new PrismaClient()
export default db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;buat file baru bernama .babelrc . babel adalah berfungsi sebagai compiler yang akan mengubah code kita sama dengan react dan next js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.babelrc

{
    "presets":["@babel/preset-env"]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;di package.json tambahkan src/index.js&lt;br&gt;
sebelumnya install nodemon &lt;code&gt;npm install -g nodemon&lt;/code&gt; secara global, cek apakah sudah terinstall nodemon &lt;code&gt;nodemon -v&lt;/code&gt; kalau sudah terinstall gak usah npm install lagi untuk menjalankan server disisi development jadi ketika ada perubahan dia akan otomatis kerestart servernya gak usah manual stop server ketika melakukan perubahan disisi code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//package.json

{
  "name": "express_mrc",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",
  "scripts": {
    "dev": "nodemon --exec babel-node ./src/index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@prisma/client": "^4.7.1",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "prisma": "^4.7.1"
  },
  "devDependencies": {
    "@babel/core": "^7.20.5",
    "@babel/node": "^7.20.5",
    "@babel/preset-env": "^7.20.2"
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selesai tahap instalasi, selanjutnya buat folder utama src didalamnya terdapat folder controller dan folder routes, untuk modelnya sudah dibuatkan sama schema.prisma&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//index.js

import express from 'express'
import env from 'dotenv'
env.config()

const app = express()
const PORT = process.env.PORT

//middleware
app.use(express.json())

//route
app.get("/", (req, res)=&amp;gt;{
    res.status(200).json({
        success :true,
        message : "Berhasil terhubung ke beckend"
    })

})

app.listen(PORT, ()=&amp;gt;{
    console.info("Server berhasil berjalan...")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;env.config untuk membaca file &lt;code&gt;.env&lt;/code&gt; tulisan PORT karena mengikuti file .env yang tulisannya besar semua PORT=9000. file .env .gitignore node module tidak di push ke github. middle ware json berfungsi menangkap body dengan bentuk json. route, method yang digunakan get, ada ufnction didalamnya ada request dan response, objek didalam method json . setiap memberikan respon kita kasih status, statusnya (200), menampilkan pesan success true&lt;/p&gt;

&lt;p&gt;trakhir kita buat method listen POSRT console.info ('berhasil berjalan....)&lt;/p&gt;

&lt;p&gt;jalankan app &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;menampilkan cmd dan localhost:9000&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uVJDspzq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/118vjadjmelti5bzo36b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uVJDspzq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/118vjadjmelti5bzo36b.png" alt="Image cmd running" width="608" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MCGtYFeB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ey3e75cauebteqhbuhip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MCGtYFeB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ey3e75cauebteqhbuhip.png" alt="Image localhost:9000" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;selanjutnya kita akan pisahkan controller dan route, buat siswa_controller.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//siswa.controller.js

import {reques, request, response} from 'express'
import db from "../../prisma/connection"

//create data siswa
export const siswa_create = async(req=request, res=response)=&amp;gt;{
    try{
        const data = await req.body
        const createDataSiswa = await db.dataSiswa.create({
            data : data
        })
        return res.status(201).json({
            success :true,
            data : createDataSiswa
        })
    } catch (error){
        return res.status(500).json({
            success : false,
            error : error.message
        })
    }

}

//read data siswa
export const siswa_read = async (req=request, res=response)=&amp;gt;{
    try{
        const result = await db.dataSiswa.findMany()
        return res.status(200).json({
            success : true,
            data : result
        })
    }catch(error){
        return res.status(500).json({
            success : false,
            error : error.message
        })
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;selesai controller, selanjutnya ke routes buat file siswa_routes.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//routes/siswa_routes.js

import express from "express"
import { siswa_create, siswa_read } from "../controllers/siswa_controller"

const siswa_routes = express.Router()
siswa_routes.post("/api/siswa/create", siswa_create)

//route read siswa
siswa_routes.get("/api/siswa/read", siswa_read)

export default siswa_routes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;routes sudah jadi, selanjutnya kita ganti routes yang ada di index&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//index.js

import express from 'express'
import env from 'dotenv'
import siswa_routes from './routes/siswa_routes'
env.config()

const app = express()
const PORT = process.env.PORT

//middleware
app.use(express.json())

//route
app.use(siswa_routes)
// app.get("/", (req, res)=&amp;gt;{
//     res.status(200).json({
//         success :true,
//         message : "Berhasil terhubung ke beckend"
//     })
// })

app.listen(PORT, ()=&amp;gt;{
    console.info("Server berhasil berjalan...")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--udPwGxt1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qujkctgr64tkuwto4ui6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--udPwGxt1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qujkctgr64tkuwto4ui6.png" alt="Image error 9000" width="880" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;install rest client, untuk melakukan rest, bisa thunder client atau aplikasi terpisah seperti postman.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_384536k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bphz37e8gfi1gc43og89.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_384536k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bphz37e8gfi1gc43og89.png" alt="Image restclient" width="861" height="715"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;buat file baru tester.rest&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//tester.rest

### create data siswa
//disini harusnya muncul tulisan send request
POST http://localhost:9000/api/siswa/create
Content-Type: application/json

//disini kasih kosong, untuk header

{
    "nama_lengkap" : "Andi Ismail",
    "usia" : 20,
    "alamat" : "Jl H. Midi Limo Depok",
    "phone" : "081212345678",
    "email" : "andi1@andi.com", //perhatikan ini uniq 
    "nis"   : "123456789"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tekan tulisan sent request nanti akan muncul respon disebelah kanannya dan berhasil menambahkan data. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yrfi8vGf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgnd51bx6u3f7ohz96mc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yrfi8vGf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgnd51bx6u3f7ohz96mc.png" alt="Image send request create" width="880" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sekarang kita tambahkan read data siswa&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//tester.rest

### create data siswa

POST http://localhost:9000/api/siswa/create
Content-Type: application/json

{
    "nama_lengkap" : "Andi ",
    "usia" : 25,
    "alamat" : "Jl H. Midi Limo Depok",
    "phone" : "081212345678",
    "email" : "andi123@andi.com",
    "nis"   : "123456789"
}

### read data siswa
GET http://localhost:9000/api/siswa/read 
Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E-RL7pO3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mhojzqjxlaslz8hvjt9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E-RL7pO3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mhojzqjxlaslz8hvjt9q.png" alt="Image send read data" width="880" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4nXgOq13--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hh7pbmgpbapddq3au4zd.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4nXgOq13--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hh7pbmgpbapddq3au4zd.gif" alt="Image send request" width="880" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Berhasil membuat create data dan read data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/andiks2018/JvalleyExpress-modelRoutesController.git"&gt;github repository&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cover letter</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Sun, 04 Dec 2022 15:10:04 +0000</pubDate>
      <link>https://dev.to/andiismail/cover-letter-2jnh</link>
      <guid>https://dev.to/andiismail/cover-letter-2jnh</guid>
      <description>&lt;p&gt;[Tunjukkan portofolio dengan skill yang diminta]&lt;br&gt;
[Tanya ke klien, agar ada komunikasi]&lt;br&gt;
[CTA]&lt;br&gt;
[Nama]&lt;/p&gt;

&lt;h1&gt;
  
  
  [List semua portofolio]
&lt;/h1&gt;

&lt;p&gt;My biggest laravel and vue project is &lt;a href="https://produkmu.id" rel="noopener noreferrer"&gt;https://produkmu.id&lt;/a&gt;, there I use Laravel 9.x and Vue 2.7. You can also read in my medium here: url. Working with 2.6 will be easy for me. Are you going to use latest Vue 3.0 for this project?&lt;/p&gt;

&lt;p&gt;Contact me anytime and I will be more than happy to help you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Andi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below is my complete portofolio:&lt;br&gt;
1.&lt;br&gt;
2.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CONTOH UNTUK COVER LETTER BAGI YANG BELUM PUNYA SKILL, dan HANYA MEDIUM:&lt;/p&gt;

&lt;p&gt;For laravel and vue, you can check in my &lt;a href="https://medium.com/@andi/ysdkjhdu" rel="noopener noreferrer"&gt;https://medium.com/@andi/ysdkjhdu&lt;/a&gt;. I use Laravel 9 and Vue 2.7.  Working with 2.6 will be easy for me. Are you going to use latest Vue 3.0 for this project?&lt;/p&gt;

&lt;p&gt;Contact me anytime and I will be more than happy to help you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Andi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below is my complete portofolio:&lt;br&gt;
1.&lt;br&gt;
2.&lt;br&gt;
3.&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Express handle request body</title>
      <dc:creator>Andi Ismail</dc:creator>
      <pubDate>Sat, 03 Dec 2022 08:06:22 +0000</pubDate>
      <link>https://dev.to/andiismail/express-handle-request-body-3p1a</link>
      <guid>https://dev.to/andiismail/express-handle-request-body-3p1a</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/andiks2018/JvalleyExpress-membuatApi.git express_req_body
cd express_req_body
npm install //akan install deppendency yang kita butuhkan
dir
code .
npx prisma db push

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ada error env prisma hilang sehingga db psuh gak bisa dilakukan, kita buat file baru namanya .env&lt;br&gt;
npm install -g nodemon&lt;br&gt;
npm run dev //menjalankan aplikasi&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//.env

DATABASE_URL = "file:./db.slite" //database berbentuk file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sekarang kita ulangi kembali prisma db push &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfqg8c440c8iwl4vx4o2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfqg8c440c8iwl4vx4o2.png" alt="Image env prisma berhasil"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kita menggunakan nodemon untuk menjalankan express,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//package.json

{
  "name": "express_simpleapi",
  "version": "1.0.0",
  "description": "",
  "main": "app/index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;amp;&amp;amp; exit 1",
    "dev": "nodemon --exec babel-node app/index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@prisma/client": "^4.7.1",
    "cors": "^2.8.5",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "prisma": "^4.7.1"
  },
  "devDependencies": {
    "@babel/cli": "^7.19.3",
    "@babel/core": "^7.20.5",
    "@babel/node": "^7.20.5",
    "@babel/preset-env": "^7.20.2"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4k5qpxgglxnt7byg5ku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4k5qpxgglxnt7byg5ku.png" alt="Image gambar"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mh17c6h8h4dapblzqqy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mh17c6h8h4dapblzqqy.png" alt="Image restclien extension"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kita buat file tester.rest&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpuerocixh7hq9nt8t36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpuerocixh7hq9nt8t36.png" alt="Image apa ini"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//tester.rest (akan muncul tulisan send request)

### create notes

POST http://localhost:9000/note/create?title=test title&amp;amp;content=ini kontentnya&amp;amp;author=andiismail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kita klik send request akan muncul response 200&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwwj3wjksyncqmgxp09m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwwj3wjksyncqmgxp09m.png" alt="Image response"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sekarang kita buat read notenya, klik send request dan lihat responsnya&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;### read notes
GET http://localhost:9000/note/read
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ini hasilnya &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhq4hd2whhbl7jhtlz5ar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhq4hd2whhbl7jhtlz5ar.png" alt="Image response lagi"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kita ganti &lt;code&gt;const{title, content, author}= req.query&lt;/code&gt;menjadi &lt;code&gt;const{title, content, author}= req.body&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;untuk mnghabdle data json, kita perlu middle ware&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//index.js

// sekaramg kit sudah bisa menggunakan es-6 di javascript
import express from "express";
import db from "../prisma/connection";

const app = express()

//midleware
app.unsubscribe(express.json())


//route
app.post("/note/create", async (req, res)=&amp;gt;{
    //console.log(req.headers)

    const{title, content, author}= req.body
    const createNote = await db.notes.create({
        data : {
            title : title,
            content : content,
            author:author
        }
    })
    res.status(200).json({
        //success :true,
        //message:"server berhsil terhubung"
        success : true,
        data : createNote  
    })
})

//params
app.get("/note/read", async(req, res)=&amp;gt;{
    const readNotes = await db.notes.findMany()

    res.status(200).json({
        success :true,
        data : readNotes
    })
})

//listener
app.listen(9000, ()=&amp;gt;{
    console.log('server beckend berjalan..')
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kita sebelumnya telah merubah dari query menjadi body serta menabah middleware. selanjuntnya kita buat file note_routes.js&lt;/p&gt;

&lt;p&gt;kita cut file di index.js get dan post (//params dan //route).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//route
app.post("/note/create", async (req, res)=&amp;gt;{
    //console.log(req.headers)

    const{title, content, author}= req.body
    const createNote = await db.notes.create({
        data : {
            title : title,
            content : content,
            author:author
        }
    })
    res.status(200).json({
        //success :true,
        //message:"server berhsil terhubung"
        success : true,
        data : createNote  
    })
})

//params
app.get("/note/read", async(req, res)=&amp;gt;{
    const readNotes = await db.notes.findMany()

    res.status(200).json({
        success :true,
        data : readNotes
    })
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kita pindahkan ke note_routes.js ganti app jadi note_routs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//note_routes.js

import express from "express";
import db from "../../prisma/connection"
const note_routes = express.Router()

//route
note_routes.post("/note/create", async (req, res)=&amp;gt;{
    //console.log(req.headers)

    const{title, content, author}= req.body
    const createNote = await db.notes.create({
        data : {
            title : title,
            content : content,
            author:author
        }
    })
    res.status(200).json({
        //success :true,
        //message:"server berhsil terhubung"
        success : true,
        data : createNote  
    })
})

//params
note_routes.get("/note/read", async(req, res)=&amp;gt;{
    const readNotes = await db.notes.findMany()

    res.status(200).json({
        success :true,
        data : readNotes
    })
})

export default note_routes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kita kembali ke index.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//index.js

import express from "express";
import note_routes from "./routes/note_routes";

const app = express()

//midleware
app.use(express.json())

//listener
app.listen(9000, ()=&amp;gt;{
    console.log('server beckend berjalan..')
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;masih error, &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=l8WPWK9mS5M" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=l8WPWK9mS5M&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=4T6EXrxwctI&amp;amp;t=4526s" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=4T6EXrxwctI&amp;amp;t=4526s&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
