Can JavaScript Be Used for Backend - Practical Examples
Practical code examples demonstrating how JavaScript can be used for backend development with Node.js frameworks and tools.
Can JavaScript Be Used for Backend - Practical Examples
Wondering if JavaScript can be used for backend development? These practical code examples demonstrate exactly how JavaScript powers server-side applications through Node.js and popular frameworks.
Basic HTTP Server Example #
The simplest way to prove JavaScript can be used for backend is creating a basic HTTP server:
// basic-server.js
const http = require('http');
const url = require('url');
const server = http.createServer((req, res) => {
const parsedUrl = url.parse(req.url, true);
// Set CORS headers
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Content-Type', 'application/json');
// Simple routing
if (parsedUrl.pathname === '/api/status') {
res.writeHead(200);
res.end(JSON.stringify({
status: 'success',
message: 'JavaScript backend is running!'
}));
} else {
res.writeHead(404);
res.end(JSON.stringify({ error: 'Not Found' }));
}
});
server.listen(3000, () => {
console.log('JavaScript backend server running on port 3000');
});
Express.js RESTful API Example #
Here's how JavaScript can be used for backend API development with Express.js:
// express-api.js
const express = require('express');
const app = express();
// Middleware
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// In-memory data store (use database in production)
let users = [
{ id: 1, name: 'John Doe', email: 'john@example.com' },
{ id: 2, name: 'Jane Smith', email: 'jane@example.com' }
];
// GET all users
app.get('/api/users', (req, res) => {
res.json({
success: true,
data: users,
message: 'JavaScript backend serving user data'
});
});
// GET user by ID
app.get('/api/users/:id', (req, res) => {
const userId = parseInt(req.params.id);
const user = users.find(u => u.id === userId);
if (!user) {
return res.status(404).json({
success: false,
message: 'User not found'
});
}
res.json({ success: true, data: user });
});
// POST create new user
app.post('/api/users', (req, res) => {
const { name, email } = req.body;
if (!name || !email) {
return res.status(400).json({
success: false,
message: 'Name and email are required'
});
}
const newUser = {
id: users.length + 1,
name,
email
};
users.push(newUser);
res.status(201).json({
success: true,
data: newUser,
message: 'User created successfully'
});
});
// PUT update user
app.put('/api/users/:id', (req, res) => {
const userId = parseInt(req.params.id);
const userIndex = users.findIndex(u => u.id === userId);
if (userIndex === -1) {
return res.status(404).json({
success: false,
message: 'User not found'
});
}
users[userIndex] = { ...users[userIndex], ...req.body };
res.json({
success: true,
data: users[userIndex],
message: 'User updated successfully'
});
});
// DELETE user
app.delete('/api/users/:id', (req, res) => {
const userId = parseInt(req.params.id);
const userIndex = users.findIndex(u => u.id === userId);
if (userIndex === -1) {
return res.status(404).json({
success: false,
message: 'User not found'
});
}
users.splice(userIndex, 1);
res.json({
success: true,
message: 'User deleted successfully'
});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`JavaScript backend API running on port ${PORT}`);
});
Database Integration Example #
JavaScript can be used for backend database operations. Here's a MongoDB example:
// database-example.js
const express = require('express');
const mongoose = require('mongoose');
const app = express();
app.use(express.json());
// MongoDB connection
mongoose.connect('mongodb://localhost:27017/jsbackend', {
useNewUrlParser: true,
useUnifiedTopology: true
});
// User schema and model
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
createdAt: { type: Date, default: Date.now }
});
const User = mongoose.model('User', userSchema);
// Database operations with JavaScript
app.get('/api/users', async (req, res) => {
try {
const users = await User.find().select('-__v');
res.json({
success: true,
data: users,
message: 'JavaScript backend with MongoDB integration'
});
} catch (error) {
res.status(500).json({
success: false,
message: error.message
});
}
});
app.post('/api/users', async (req, res) => {
try {
const user = new User(req.body);
await user.save();
res.status(201).json({
success: true,
data: user,
message: 'User saved to database via JavaScript backend'
});
} catch (error) {
res.status(400).json({
success: false,
message: error.message
});
}
});
app.listen(3000, () => {
console.log('JavaScript backend with database running on port 3000');
});
Authentication Middleware Example #
JavaScript backend can handle authentication and security:
// auth-middleware.js
const jwt = require('jsonwebtoken');
const SECRET_KEY = 'your-secret-key';
// JWT authentication middleware
function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (!token) {
return res.status(401).json({
success: false,
message: 'Access token required'
});
}
jwt.verify(token, SECRET_KEY, (err, user) => {
if (err) {
return res.status(403).json({
success: false,
message: 'Invalid or expired token'
});
}
req.user = user;
next();
});
}
// Login endpoint
app.post('/api/login', async (req, res) => {
const { email, password } = req.body;
// Validate credentials (use proper hashing in production)
if (email === 'admin@example.com' && password === 'password') {
const token = jwt.sign(
{ email: email, role: 'admin' },
SECRET_KEY,
{ expiresIn: '1h' }
);
res.json({
success: true,
token: token,
message: 'Authentication successful with JavaScript backend'
});
} else {
res.status(401).json({
success: false,
message: 'Invalid credentials'
});
}
});
// Protected route
app.get('/api/protected', authenticateToken, (req, res) => {
res.json({
success: true,
data: req.user,
message: 'Access granted by JavaScript backend security'
});
});
File Upload Handling Example #
JavaScript backend can handle file operations:
// file-upload.js
const express = require('express');
const multer = require('multer');
const path = require('path');
const fs = require('fs');
const app = express();
// Configure multer for file uploads
const storage = multer.diskStorage({
destination: (req, file, cb) => {
const uploadDir = 'uploads/';
if (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir);
}
cb(null, uploadDir);
},
filename: (req, file, cb) => {
const uniqueName = Date.now() + '-' + Math.round(Math.random() * 1E9) + path.extname(file.originalname);
cb(null, uniqueName);
}
});
const upload = multer({
storage: storage,
limits: { fileSize: 5 * 1024 * 1024 }, // 5MB limit
fileFilter: (req, file, cb) => {
const allowedTypes = /jpeg|jpg|png|gif|pdf/;
const extname = allowedTypes.test(path.extname(file.originalname).toLowerCase());
const mimetype = allowedTypes.test(file.mimetype);
if (extname && mimetype) {
return cb(null, true);
} else {
cb(new Error('Invalid file type'));
}
}
});
// File upload endpoint
app.post('/api/upload', upload.single('file'), (req, res) => {
if (!req.file) {
return res.status(400).json({
success: false,
message: 'No file uploaded'
});
}
res.json({
success: true,
data: {
filename: req.file.filename,
originalName: req.file.originalname,
size: req.file.size,
path: req.file.path
},
message: 'File uploaded successfully via JavaScript backend'
});
});
app.listen(3000);
Usage Instructions #
- Install Dependencies:
npm install express mongoose multer jsonwebtoken - Run Examples:
node basic-server.jsornode express-api.js - Test Endpoints: Use Postman or curl to test the API endpoints
- Customize: Modify the code for your specific backend requirements
These examples clearly demonstrate that JavaScript can be used for backend development, offering robust server-side capabilities through Node.js and its extensive ecosystem.