Restful api nodejs mysql

Di sini saya akan menunjukkan cara membuat contoh REST API CRUD menggunakan Nodejs Express dan server MySQL. CRUD berarti operasi Buat, Baca, Perbarui, dan Hapus yang dilakukan melalui sumber daya REST (Representational State Transfer) yang bekerja pada protokol http/https

Sumber daya atau API REST bekerja pada kata kerja, seperti, GET, POST, PUT, DELETE, dll. Jadi jelas bahwa GET berarti Anda perlu mengambil data dari titik akhir server, POST berarti Anda perlu membuat sumber daya baru di titik akhir server, PUT berarti Anda perlu memperbarui sumber daya yang ada di server dan DELETE berarti Anda perlu menghapus sumber daya di

Meskipun Anda memiliki arti kata kerja untuk bekerja dengan sumber daya REST tetapi sekali lagi tergantung pada implementasi di sisi server. Jadi misalnya, untuk mengambil data dari server Anda bisa menggunakan kata kerja POST. Jadi untuk membuat sumber daya baru Anda juga dapat menggunakan kata kerja GET, tetapi ingat apakah Anda harus benar-benar menggunakan parameter badan permintaan pada titik akhir GET

Di sini saya akan menggunakan Nodejs dan Express untuk membuat titik akhir REST dengan MySQL sebagai sistem persisten untuk menyimpan data

Prasyarat

Nodejs v12. 18. 3, npm6. 14. 6, Ekspres 4. 17. 1, MySQL8. 0. 17

Pengaturan Proyek

Pilih direktori root proyek Anda, katakanlah, nama direktori tersebut adalah nodejs_mysql_rest_api_crud. Saya mungkin tidak menyebutkan nama direktori root proyek ini tetapi saya berasumsi bahwa saya akan membuat file atau folder apa pun sehubungan dengan direktori root proyek ini

Sekarang jalankan perintah npm init di direktori root proyek Anda. Perintah ini akan membuat paket. json dengan informasi dasar, seperti nama aplikasi, deskripsi, versi, penulis, lisensi, dependensi apa pun, dll

Selanjutnya Anda perlu menjalankan perintah npm install dan perintah ini akan membuat file package-lock. json di mana Anda akan menemukan semua detail dependensi Anda. Ketergantungan ini diunduh ke folder node_modules di bawah direktori root proyek Anda

Selanjutnya adalah menginstal Express menggunakan perintah npm install express dengan cara yang sama seperti Anda menjalankan dua perintah lainnya di atas

Anda perlu menginstal driver mysql juga untuk terhubung ke server MySQL Anda dengan menjalankan perintah berikut

npm install mysql

Nah, Anda sudah selesai dengan penyiapan proyek. Sekarang mari beralih ke bagian implementasi

Sumber Daya CRUD

Sekarang saya akan mengimplementasikan operasi CRUD menggunakan sumber daya REST. Saya akan memisahkan layer menjadi file yang berbeda

Untuk operasi basis data saya akan membuat file model, untuk menangani permintaan / respons klien saya akan membuat file pengontrol, untuk menangani rute saya akan membuat file rute, untuk membuat konfigurasi server dan server saya akan membuat file aplikasi, untuk konfigurasi basis data saya akan membuat konfigurasi db

Konfigurasi Basis Data

Mari kita mulai dengan konfigurasi basis data. Buat file bernama db. js di bawah folder config untuk membuat koneksi database. Pastikan untuk mengubah pengaturan database sesuai dengan milik Anda

Dalam file ini saya telah mendefinisikan objek Item kemudian melakukan operasi CRUD yang diperlukan. Saya mengambil catatan berdasarkan id atau nama yang diberikan. Saya juga mengambil semua catatan dari database. Operasi tulis lainnya seperti buat/simpan, perbarui dan hapus juga dilakukan

'use strict';

const mysql = require('mysql');

var con = mysql.createConnection({
	host: 'localhost',
	user: 'root',
	password: 'root',
	database: 'roytuts'
});

con.connect(function(err) {
	if (err) throw err;
	console.log("Connected to MySQL!");
});

module.exports = con;
_

Tabel MySQL dan contoh data diberikan di bawah ini yang akan saya gunakan untuk aplikasi ini

CREATE TABLE IF NOT EXISTS `items` (
  `item_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `item_name` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
  `item_desc` text COLLATE utf8mb4_unicode_ci,
  `item_price` float NOT NULL,
  PRIMARY KEY (`item_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


INSERT INTO `items` (`item_id`, `item_name`, `item_desc`, `item_price`) VALUES
	(1, 'CD', 'CD is a compact disk', 100),
	(2, 'DVD', 'DVD is larger than CD in size', 150),
	(3, 'ABC', 'ABC test description', 24),
	(4, 'XYZ', 'XYZ test description', 25.32),
	(5, 'CD Player', 'CD player is used to play CD', 30.02);

Konfigurasi Server

Titik masuk untuk aplikasi Nodejs adalah index. js yang dapat Anda temukan di package.js. file json. Jadi, Anda dapat menulis kode Anda di index. js atau Anda dapat menulis file lain. Saya akan menulis ke dalam file bernama app. js. Pastikan untuk memperbarui paket Anda. file json dengan nama file baru Anda

Aplikasi. File js memiliki kode berikut

var mysql = require('mysql');
var express = require('express');
var bodyParser = require('body-parser');

var app = express();

var server = require('http').Server(app);

var port = process.env.PORT || 4000;

// to support JSON-encoded bodies
app.use(bodyParser.json())

// to support URL-encoded bodies
app.use(bodyParser.urlencoded({ extended: true }))

// Require item routes
const routes = require('./src/route/item.route')

// using as middleware
app.use('/item', routes)

// root path
app.get("/", (req, res, next) => {
	res.json("What's up?");
});

server.listen(port, () => {
    console.log('Listening on port: ' + port);
});

Baris pertama membutuhkan mysql dan menggunakan variabel mysql untuk mewakilinya. Baris kedua membutuhkan express dan menggunakan variabel express untuk mewakilinya. Baris ketiga membutuhkan body-parser dan menggunakan variabel bodyParser untuk mewakilinya. Baris keempat menginisialisasi server ekspres dan menempatkan server yang diinisialisasi ke dalam aplikasi variabel

Nodejs memiliki modul bawaan yang disebut HTTP, yang memungkinkan Nodejs untuk mentransfer data melalui Hyper Text Transfer Protocol (HTTP). Untuk menyertakan modul HTTP, gunakan metode require().

'use strict';

const mysql = require('mysql');

var con = mysql.createConnection({
	host: 'localhost',
	user: 'root',
	password: 'root',
	database: 'roytuts'
});

con.connect(function(err) {
	if (err) throw err;
	console.log("Connected to MySQL!");
});

module.exports = con;
_0

Selanjutnya jika ada port yang ditentukan melalui variabel lingkungan PORT kemudian gunakan atau secara default gunakan port 4000

Kemudian atur aplikasi Anda untuk mendengarkan port 4000 dan buat fungsi panggilan balik yang mengatakan bahwa server Anda berjalan di port 4000 atau lebih

Saya telah mengatur bodyParser untuk menangani tipe konten json dan application/x-www-form-urlencoded

Saya telah menentukan jalur root untuk aplikasi ini. Saya juga telah menggunakan rute dan saya akan memberi tahu Anda nanti tentang hal ini ketika saya akan membuat rute untuk aplikasi ini

Aplikasi Anda sekarang dapat diakses di http. // localhost. 4000, dan mencapai titik akhir itu memberi Anda hasil berikut

Restful api nodejs mysql

Model

Saya akan membuat model untuk melakukan operasi basis data. Buat item file. model. js di bawah folder model

'use strict';

var con = require('./../../config/db');

// Item Object

var Item = function(item){
  this.item_id = item.item_id;
  this.item_name = item.item_name;
  this.item_desc = item.item_desc;
  this.item_price = item.item_price;
};

// Define CRUD Operations Functions

Item.findById = function (id, result) {
	let sql = 'SELECT * FROM items WHERE item_id = ?';
	
	con.query(sql, id, (err, row, fields) => {
		console.log("error: ", err);
		if (err) result(err, null);
		
		console.log(row);
		result(null, row);
	});
};

Item.findByName = function (name, result) {
	let sql = 'SELECT * FROM items WHERE item_name = ?';
	
	con.query(sql, name, (err, rows, fields) => {
		console.log("error: ", err);
		if (err) result(err, null);
		
		console.log('rows: ', rows);
		result(null, rows);
	});
};

Item.findAll = function (result) {
	let sql = 'SELECT * FROM items';
	
	con.query(sql, (err, rows, fields) => {
		console.log("error: ", err);
		if (err) result(err, null);
		
		console.log(rows);
		result(null, rows);
	});
};

Item.create = function (newItem, result) {	
	let data = [newItem.item_name, newItem.item_desc, newItem.item_price];
	
	let sql = 'INSERT INTO items(item_name, item_desc, item_price) VALUES(?, ?, ?)';
	
	con.query(sql, data, (err, row, fields) => {
		console.log("error: ", err);
		if (err) result(err, null);
		
		console.log(row.insertId);
		result(null, row.insertId);
	});
};

Item.update = function(item, result){
	let data = [item.item_name, item.item_desc, item.item_price, item.item_id];
	
	let sql = 'UPDATE items SET item_name = ?, item_desc = ?, item_price = ? WHERE item_id = ?';
	
	con.query(sql, data, (err, row, fields) => {
		console.log("error: ", err);
		if (err) result(err, null);
		
		console.log(row.affectedRows);
		result(null, row.affectedRows);
	});
};

Item.delete = function(id, result){
	let sql = 'DELETE FROM items WHERE item_id = ?';
	
	con.query(sql, id, (err, row, fields) => {
		console.log("error: ", err);
		if (err) result(err, null);
		
		console.log(row.affectedRows);
		result(null, row.affectedRows);
	});
};

module.exports= Item;

Pengontrol

Saya membuat item file pengontrol. pengontrol. js di bawah folder pengontrol untuk menangani permintaan/respons dari klien

Sumber daya GET untuk titik akhir REST umumnya digunakan untuk mengambil atau membaca data dari server. Jadi di sini saya akan membuat titik akhir REST untuk mengambil data dari server

Endpoint POST digunakan untuk membuat record baru ke dalam server. PUT digunakan untuk memperbarui sumber daya yang ada di server dan DELETE digunakan untuk menghapus sumber daya yang ada di server

Panggilan balik menerima dua parameter,

'use strict';

const mysql = require('mysql');

var con = mysql.createConnection({
	host: 'localhost',
	user: 'root',
	password: 'root',
	database: 'roytuts'
});

con.connect(function(err) {
	if (err) throw err;
	console.log("Connected to MySQL!");
});

module.exports = con;
_1 adalah badan permintaan dan membawa informasi tentang permintaan. res adalah badan respons dan digunakan untuk menangani fungsi respons. Misalnya, fungsi
'use strict';

const mysql = require('mysql');

var con = mysql.createConnection({
	host: 'localhost',
	user: 'root',
	password: 'root',
	database: 'roytuts'
});

con.connect(function(err) {
	if (err) throw err;
	console.log("Connected to MySQL!");
});

module.exports = con;
_2 digunakan untuk mengembalikan data json

'use strict';

const Item = require('../model/item.model');

exports.findById = function(req, res) {
	const id = req.params.id;
	
	if (!id) {
		// 400 = bad request
		return res.status(400).send('The required path variable id is missing')
	}
	
	Item.findById(id, function(err, item) {
		if (err) return res.status(500).send('Error occured during fetching item for id ' + id);
		console.log('item: ', item);
		
		return res.send(item);
	});
};

exports.findByName = function(req, res) {
	const name = req.body.name
	
	// 400 = bad request
	if (!name) {
		return res.status(400).send('The required field name is missing')
	}
	
	Item.findByName(name, function(err, items) {
		if (err) return res.status(500).send('Error occured during fetching item for name ' + name);
		
		console.log('items: ', items);
		
		return res.send(items);
	});
};

exports.findAll = function(req, res) {
	Item.findAll(function(err, items) {
		if (err) return res.status(500).send('Error occured during fetching items');
		console.log('items: ', items);
		
		return res.send(items);
	});
};

exports.create = function(req, res) {
	const newItem = new Item(req.body);
	
	// 400 = bad request
	if(req.body.constructor === Object && Object.keys(req.body).length === 0){
		return res.status(400).send('One or more required fields are missing');
	} if (!newItem.item_name || !newItem.item_desc || !newItem.item_price) {		
		return res.status(400).send('One or more required fields are missing')
	} else {		
		Item.create(newItem, function(err, item_id) {
			console.log('err: ', err);
			//if (err === Object) res.status(500).send('Item already exist with name ' + err.item_name);
			
			if (err || item_id <= 0) return res.status(500).send('Error occured during saving item');
			
			return res.sendStatus(200);
		});
	}
};

exports.update = function(req, res) {
	const item = new Item(req.body);
	
	// 400 = bad request
	if(req.body.constructor === Object && Object.keys(req.body).length === 0) {
		return res.status(400).send('One or more required fields are missing');
	} if (!item.item_id || !item.item_name || !item.item_desc || !item.item_price) {
		return res.status(400).send('One or more required fields are missing');
	} else {
		Item.update(item, function(err, result) {
			if (err || result <= 0) return res.status(500).send('Error occured during updating item');
			
			return res.sendStatus(200);
		});
	}
};

exports.delete = function(req, res) {
	const id = req.params.id;
	
	if (!id) {
		// 400 = bad request
		return res.status(400).send('The required path variable id is missing');
	}
	
	Item.delete(id, function(err, employee) {
		if (err) return res.status(500).send('Error occured during deleting item');
		
		return res.sendStatus(200);
	});
};
_

Rute

Barang itu. rute. File js di bawah rute menentukan titik akhir untuk REST API

const express = require('express')

const router = express.Router()

const controller =   require('../controller/item.controller');

// Retrieve a single item with id
router.get('/:id', controller.findById);

// Retrieve a single item with id
router.post('/name', controller.findByName);

// Retrieve all items
router.get('/', controller.findAll);

// Create a new item
router.post('/', controller.create);

// Update an item
router.put('/', controller.update);

// Delete an item with id
router.delete('/:id', controller.delete);

module.exports = router
_

Titik Akhir API

  1. DAPATKAN
    'use strict';
    
    const mysql = require('mysql');
    
    var con = mysql.createConnection({
    	host: 'localhost',
    	user: 'root',
    	password: 'root',
    	database: 'roytuts'
    });
    
    con.connect(function(err) {
    	if (err) throw err;
    	console.log("Connected to MySQL!");
    });
    
    module.exports = con;
    _3. akan memberi Anda semua item yang disimpan dalam database
  2. DAPATKAN
    'use strict';
    
    const mysql = require('mysql');
    
    var con = mysql.createConnection({
    	host: 'localhost',
    	user: 'root',
    	password: 'root',
    	database: 'roytuts'
    });
    
    con.connect(function(err) {
    	if (err) throw err;
    	console.log("Connected to MySQL!");
    });
    
    module.exports = con;
    _4. akan memberikan item tertentu dengan id
  3. POSTING
    'use strict';
    
    const mysql = require('mysql');
    
    var con = mysql.createConnection({
    	host: 'localhost',
    	user: 'root',
    	password: 'root',
    	database: 'roytuts'
    });
    
    con.connect(function(err) {
    	if (err) throw err;
    	console.log("Connected to MySQL!");
    });
    
    module.exports = con;
    _5. akan memberi Anda semua item untuk badan permintaan yang diberikan
  4. POSTING
    'use strict';
    
    const mysql = require('mysql');
    
    var con = mysql.createConnection({
    	host: 'localhost',
    	user: 'root',
    	password: 'root',
    	database: 'roytuts'
    });
    
    con.connect(function(err) {
    	if (err) throw err;
    	console.log("Connected to MySQL!");
    });
    
    module.exports = con;
    _3. buat item untuk badan permintaan yang diberikan
  5. PUT
    'use strict';
    
    const mysql = require('mysql');
    
    var con = mysql.createConnection({
    	host: 'localhost',
    	user: 'root',
    	password: 'root',
    	database: 'roytuts'
    });
    
    con.connect(function(err) {
    	if (err) throw err;
    	console.log("Connected to MySQL!");
    });
    
    module.exports = con;
    _3. perbarui item sepenuhnya untuk badan permintaan yang diberikan
  6. HAPUS
    'use strict';
    
    const mysql = require('mysql');
    
    var con = mysql.createConnection({
    	host: 'localhost',
    	user: 'root',
    	password: 'root',
    	database: 'roytuts'
    });
    
    con.connect(function(err) {
    	if (err) throw err;
    	console.log("Connected to MySQL!");
    });
    
    module.exports = con;
    _4. menghapus item

Menguji REST API

Saya menggunakan alat tukang pos untuk menguji API REST saya. Anda dapat menggunakan alat klien REST atau perintah CURL untuk menguji sumber daya REST Anda. Saat Anda memanggil API di klien REST, Anda juga akan melihat hasilnya di konsol

Bagaimana cara membuat REST API di node js dengan MySQL?

Pertama, kita perlu membuat folder untuk proyek kita dengan perintah di bawah ini. .
mkdir rest-with-mysql && cd rest-with-mysql Membuat folder baru untuk proyek
npm init -y Menginisialisasi Node baru. proyek js
npm install express MySQL cors Memasang Cors
Struktur aplikasi

Apakah MySQL mendukung REST API?

MySQL telah menjadi standar untuk ini selama beberapa dekade. Satu kekurangannya adalah database hanya menyimpan data. Jika Anda ingin melakukan sesuatu dengan data tersebut, a MySQL REST API memungkinkan . Inilah yang perlu Anda ketahui untuk menggunakan MySQL REST API di proyek Anda.

Bagaimana cara menggunakan REST API di MySQL?

Integrasikan Data. Muat data dari REST API ke MySQL dengan memberikan kredensial database MySQL Anda, seperti nama pengguna resmi, kata sandi, informasi tentang IP host Anda, dan nilai nomor port. You will also need to provide a name for your database and a unique name for this destination.

Bagaimana cara menghubungkan node js API dengan MySQL?

Koneksi MySQL dengan Node JS. .
Buka server web Express
Tambahkan data konfigurasi untuk database MySQL yang ada
Buka sekuel
Di sekuel, buat model tutorial
Tulis pengontrolnya
Tentukan semua rute untuk menangani setiap fungsi CRUD
Buka tukang pos
Uji REST CRUD API