1. Pengenalan Node.js
Node.js adalah runtime JavaScript yang berjalan di luar browser, memungkinkan Anda membuat aplikasi server-side yang cepat dan scalable. Dengan Node.js, Anda dapat menggunakan JavaScript untuk backend development, membuat server, API, dan banyak lagi.
Node.js menggunakan event-driven, non-blocking I/O model yang membuatnya efisien dan cocok untuk aplikasi real-time dan data-intensive.
2. Setup Lingkungan Pengembangan
Untuk mulai belajar Node.js, Anda perlu menyiapkan lingkungan pengembangan:
-
Install
Node.js
versi terbaru.
-
Gunakan editor kode seperti
Visual Studio Code
.
-
Kenali npm (Node Package Manager) untuk mengelola paket dan dependensi.
-
Pelajari cara menjalankan file JavaScript dengan perintah
node filename.js
.
Setelah setup, Anda siap membuat proyek Node.js pertama Anda!
3. Proyek 1: Server HTTP Sederhana
Kita akan membuat server HTTP sederhana yang merespon permintaan dengan teks "Hello World".
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World dari Node.js!');
});
const PORT = 3000;
server.listen(PORT, () => {
console.log(`Server berjalan di http://localhost:${PORT}`);
});
Jalankan kode ini dengan perintah
node server.js
dan buka
http://localhost:3000
di browser Anda.
4. Proyek 2: REST API dengan Express
Express adalah framework minimalis untuk Node.js yang memudahkan pembuatan REST API.
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/api/hello', (req, res) => {
res.json({ message: 'Halo dari Express!' });
});
app.listen(PORT, () => {
console.log(`Server Express berjalan di http://localhost:${PORT}`);
});
Install Express dengan
npm install express
. Jalankan server dan akses
http://localhost:3000/api/hello
untuk melihat response JSON.
5. Proyek 3: CRUD dengan MongoDB
Kita akan membuat aplikasi CRUD sederhana menggunakan MongoDB dan Mongoose.
const express = require('express');
const mongoose = require('mongoose');
const app = express();
const PORT = 3000;
app.use(express.json());
mongoose.connect('mongodb://localhost:27017/nodecrud', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const ItemSchema = new mongoose.Schema({
name: String,
description: String,
});
const Item = mongoose.model('Item', ItemSchema);
app.post('/items', async (req, res) => {
const item = new Item(req.body);
await item.save();
res.status(201).json(item);
});
app.get('/items', async (req, res) => {
const items = await Item.find();
res.json(items);
});
app.put('/items/:id', async (req, res) => {
const item = await Item.findByIdAndUpdate(req.params.id, req.body, { new: true });
res.json(item);
});
app.delete('/items/:id', async (req, res) => {
await Item.findByIdAndDelete(req.params.id);
res.json({ message: 'Item deleted' });
});
app.listen(PORT, () => {
console.log(`Server berjalan di http://localhost:${PORT}`);
});
Pastikan MongoDB sudah berjalan di komputer Anda. Install dependensi dengan
npm install express mongoose
.
6. Proyek 4: Autentikasi User dengan JWT
Implementasi autentikasi menggunakan JSON Web Token (JWT) untuk keamanan API.
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const PORT = 3000;
app.use(express.json());
const users = [{ id: 1, username: 'user1', password: 'pass123' }];
app.post('/login', (req, res) => {
const { username, password } = req.body;
const user = users.find(u => u.username === username && u.password === password);
if (!user) return res.status(401).json({ message: 'Invalid credentials' });
const token = jwt.sign({ id: user.id, username: user.username }, 'secretkey', { expiresIn: '1h' });
res.json({ token });
});
const authenticate = (req, res, next) => {
const authHeader = req.headers.authorization;
if (!authHeader) return res.status(401).json({ message: 'No token provided' });
const token = authHeader.split(' ')[1];
jwt.verify(token, 'secretkey', (err, user) => {
if (err) return res.status(403).json({ message: 'Invalid token' });
req.user = user;
next();
});
};
app.get('/profile', authenticate, (req, res) => {
res.json({ message: `Welcome ${req.user.username}!` });
});
app.listen(PORT, () => {
console.log(`Server berjalan di http://localhost:${PORT}`);
});
Install paket dengan
npm install express jsonwebtoken
. Endpoint
/login
mengeluarkan token, dan
/profile
hanya bisa diakses dengan token valid.
7. Proyek 5: Real-time Chat dengan Socket.io
Membuat aplikasi chat real-time menggunakan Socket.io.
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = new Server(server);
const PORT = 3000;
io.on('connection', (socket) => {
console.log('User connected:', socket.id);
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
socket.on('disconnect', () => {
console.log('User disconnected:', socket.id);
});
});
server.listen(PORT, () => {
console.log(`Server berjalan di http://localhost:${PORT}`);
});
Install dengan
npm install express socket.io
. Buat client HTML untuk mengirim dan menerima pesan chat secara real-time.
8. Proyek 6: Upload File dan Penyimpanan
Membuat API untuk upload file menggunakan Multer dan menyimpan file di server.
const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
const PORT = 3000;
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/');
},
filename: (req, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname));
},
});
const upload = multer({ storage });
app.post('/upload', upload.single('file'), (req, res) => {
res.json({ message: 'File berhasil diupload', filename: req.file.filename });
});
app.listen(PORT, () => {
console.log(`Server berjalan di http://localhost:${PORT}`);
});
Install dengan
npm install express multer
. Pastikan folder
uploads
sudah dibuat di root proyek.
9. Proyek 7: Task Scheduler dengan Node-cron
Menjadwalkan tugas otomatis menggunakan paket node-cron.
const cron = require('node-cron');
cron.schedule('0 9 * * *', () => {
console.log('Menjalankan tugas setiap jam 9 pagi');
});
console.log('Scheduler berjalan...');
Install dengan
npm install node-cron
. Contoh di atas menjalankan fungsi setiap jam 9 pagi setiap hari.
10. Proyek 8: Testing dengan Jest
Menulis unit test untuk aplikasi Node.js menggunakan Jest.
// math.js
function tambah(a, b) {
return a + b;
}
module.exports = { tambah };
// math.test.js
const { tambah } = require('./math');
test('menambahkan 1 + 2 sama dengan 3', () => {
expect(tambah(1, 2)).toBe(3);
});
Install Jest dengan
npm install --save-dev jest
. Jalankan test dengan
npx jest
.
11. Proyek 9: Deployment ke Heroku
Langkah-langkah deploy aplikasi Node.js ke platform Heroku.
-
Install Heroku CLI dan login dengan
heroku login
.
-
Inisialisasi git di proyek Anda dan buat repository.
-
Buat aplikasi Heroku dengan
heroku create nama-aplikasi
.
-
Push kode ke Heroku dengan
git push heroku main
.
-
Heroku akan otomatis build dan menjalankan aplikasi Anda.
Setelah deploy, aplikasi Anda dapat diakses secara online melalui URL Heroku.
12. Proyek 10: Microservices dengan Node.js
Membuat arsitektur microservices sederhana dengan beberapa service Node.js yang berkomunikasi.
Contoh: Service User dan Service Order berjalan terpisah, berkomunikasi via HTTP atau message queue.
// Service User (port 3001)
const express = require('express');
const app = express();
app.get('/users', (req, res) => {
res.json([{ id: 1, name: 'Budi' }]);
});
app.listen(3001);
// Service Order (port 3002)
const express = require('express');
const axios = require('axios');
const app = express();
app.get('/orders', async (req, res) => {
const users = await axios.get('http://localhost:3001/users');
res.json({ orders: [{ id: 1, user: users.data[0] }] });
});
app.listen(3002);
Install
axios
dengan
npm install axios
untuk komunikasi HTTP antar service.
13. Proyek 11: GraphQL API
Membuat API menggunakan GraphQL dengan Apollo Server.
const { ApolloServer, gql } = require('apollo-server');
const typeDefs = gql`
type Query {
hello: String
}
`;
const resolvers = {
Query: {
hello: () => 'Halo dari GraphQL!',
},
};
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
console.log(`Server GraphQL berjalan di ${url}`);
});
Install dengan
npm install apollo-server graphql
. Jalankan dan akses playground GraphQL untuk mencoba query.
14. Proyek 12: Integrasi dengan Third-party API
Menghubungkan aplikasi Node.js dengan API eksternal, misalnya API cuaca.
const express = require('express');
const axios = require('axios');
const app = express();
const PORT = 3000;
app.get('/weather/:city', async (req, res) => {
const city = req.params.city;
try {
const response = await axios.get(
`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=YOUR_API_KEY&units=metric`
);
res.json(response.data);
} catch (error) {
res.status(500).json({ message: 'Error mengambil data cuaca' });
}
});
app.listen(PORT, () => {
console.log(`Server berjalan di http://localhost:${PORT}`);
});
Ganti
YOUR_API_KEY
dengan API key dari
OpenWeatherMap
. Install
axios
untuk request HTTP.
Sumber Belajar dan Source Code
Berikut beberapa sumber belajar dan repository yang bisa Anda gunakan untuk memperdalam Node.js:
Repository Source Code