-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f706b71
commit 084370a
Showing
6 changed files
with
129 additions
and
85 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,94 +1,21 @@ | ||
const express = require('express'); | ||
const app = express(); | ||
const PORT = 3000; | ||
|
||
const mysql = require('mysql2'); | ||
const bodyParser = require('body-parser'); | ||
const itemRoutes = require('./src/routes/itemRoutes'); | ||
const errorMiddleware = require('./src/middleware/errorMiddleware'); // Load environment variables from .env file | ||
|
||
const db = mysql.createConnection({ | ||
host: 'localhost', | ||
user: 'root', | ||
password: '1234', | ||
database: 'testnode' | ||
}); | ||
|
||
db.connect(err => { | ||
if (err) { | ||
console.error('Error connecting to the database:', err.stack); | ||
return; | ||
} | ||
console.log('Connected to MySQL database.'); | ||
}); | ||
const app = express(); | ||
const PORT = process.env.PORT || 3000; | ||
|
||
// Middleware | ||
app.use(bodyParser.json()); | ||
|
||
app.use(express.json()); // Middleware to parse JSON bodies | ||
// Routes | ||
app.use('/items', itemRoutes); | ||
|
||
app.get('/', (req, res) => { | ||
res.send('Hello, World!'); | ||
}); | ||
// Error handling middleware | ||
app.use(errorMiddleware); | ||
|
||
// Start the server | ||
app.listen(PORT, () => { | ||
console.log(`Server is running on http://localhost:${PORT}`); | ||
}); | ||
|
||
// CREATE: POST /items | ||
app.post('/items', (req, res) => { | ||
const { name } = req.body; | ||
const query = 'INSERT INTO items (name) VALUES (?)'; | ||
|
||
db.query(query, [name], (err, results) => { | ||
if (err) { | ||
return res.status(500).json({ error: err.message }); | ||
} | ||
res.status(201).json({ id: results.insertId, name }); | ||
}); | ||
}); | ||
|
||
// READ: GET /items | ||
app.get('/items', (req, res) => { | ||
const query = 'SELECT * FROM items'; | ||
db.query(query, (err, results) => { | ||
if (err) { | ||
return res.status(500).json({ error: err.message }); | ||
} | ||
res.json(results); | ||
}); | ||
}); | ||
|
||
// READ (Single): GET /items/:id | ||
app.get('/items/:id', (req, res) => { | ||
const query = 'SELECT * FROM items WHERE id = ?'; | ||
db.query(query, [req.params.id], (err, results) => { | ||
if (err) { | ||
return res.status(500).json({ error: err.message }); | ||
} | ||
if (results.length === 0) return res.status(404).send('Item not found'); | ||
res.json(results[0]); | ||
}); | ||
}); | ||
|
||
// UPDATE: PUT /items/:id | ||
app.put('/items/:id', (req, res) => { | ||
const { name } = req.body; | ||
const query = 'UPDATE items SET name = ? WHERE id = ?'; | ||
|
||
db.query(query, [name, req.params.id], (err, results) => { | ||
if (err) { | ||
return res.status(500).json({ error: err.message }); | ||
} | ||
if (results.affectedRows === 0) return res.status(404).send('Item not found'); | ||
res.json({ id: req.params.id, name }); | ||
}); | ||
}); | ||
|
||
// DELETE: DELETE /items/:id | ||
app.delete('/items/:id', (req, res) => { | ||
const query = 'DELETE FROM items WHERE id = ?'; | ||
|
||
db.query(query, [req.params.id], (err, results) => { | ||
if (err) { | ||
return res.status(500).json({ error: err.message }); | ||
} | ||
if (results.affectedRows === 0) return res.status(404).send('Item not found'); | ||
res.status(204).send(); // No content to send back | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
const mysql = require('mysql2'); | ||
|
||
// Create a connection to the database | ||
const db = mysql.createConnection({ | ||
host: process.env.DB_HOST || 'localhost', | ||
user: process.env.DB_USER || 'root', | ||
password: process.env.DB_PASSWORD || '1234', | ||
database: process.env.DB_NAME || 'testnode' | ||
}); | ||
|
||
// Connect to the database | ||
db.connect(err => { | ||
if (err) { | ||
console.error('Error connecting to the database:', err.stack); | ||
return; | ||
} | ||
console.log('Connected to MySQL database.'); | ||
}); | ||
|
||
module.exports = db; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
const db = require('../config/db'); | ||
|
||
// Create a new item | ||
exports.createItem = (req, res) => { | ||
const { name } = req.body; | ||
const query = 'INSERT INTO items (name) VALUES (?)'; | ||
|
||
db.query(query, [name], (err, results) => { | ||
if (err) { | ||
return res.status(500).json({ error: err.message }); | ||
} | ||
res.status(201).json({ id: results.insertId, name }); | ||
}); | ||
}; | ||
|
||
// Get all items | ||
exports.getAllItems = (req, res) => { | ||
const query = 'SELECT * FROM items'; | ||
db.query(query, (err, results) => { | ||
if (err) { | ||
return res.status(500).json({ error: err.message }); | ||
} | ||
res.json(results); | ||
}); | ||
}; | ||
|
||
// Get a single item by ID | ||
exports.getItemById = (req, res) => { | ||
const query = 'SELECT * FROM items WHERE id = ?'; | ||
db.query(query, [req.params.id], (err, results) => { | ||
if (err) { | ||
return res.status(500).json({ error: err.message }); | ||
} | ||
if (results.length === 0) return res.status(404).send('Item not found'); | ||
res.json(results[0]); | ||
}); | ||
}; | ||
|
||
// Update an item by ID | ||
exports.updateItem = (req, res) => { | ||
const { name } = req.body; | ||
const query = 'UPDATE items SET name = ? WHERE id = ?'; | ||
|
||
db.query(query, [name, req.params.id], (err, results) => { | ||
if (err) { | ||
return res.status(500).json({ error: err.message }); | ||
} | ||
if (results.affectedRows === 0) return res.status(404).send('Item not found'); | ||
res.json({ id: req.params.id, name }); | ||
}); | ||
}; | ||
|
||
// Delete an item by ID | ||
exports.deleteItem = (req, res) => { | ||
const query = 'DELETE FROM items WHERE id = ?'; | ||
|
||
db.query(query, [req.params.id], (err, results) => { | ||
if (err) { | ||
return res.status(500).json({ error: err.message }); | ||
} | ||
if (results.affectedRows === 0) return res.status(404).send('Item not found'); | ||
res.status(204).send(); // No content to send back | ||
}); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
// Centralized error handling middleware | ||
const errorMiddleware = (err, req, res, next) => { | ||
console.error(err.stack); | ||
res.status(500).json({ error: 'Something went wrong!' }); | ||
}; | ||
|
||
module.exports = errorMiddleware; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
const express = require('express'); | ||
const router = express.Router(); | ||
const itemController = require('../controller/itemController'); | ||
|
||
// Create a new item | ||
router.post('/', itemController.createItem); | ||
|
||
// Get all items | ||
router.get('/', itemController.getAllItems); | ||
|
||
// Get a single item by ID | ||
router.get('/:id', itemController.getItemById); | ||
|
||
// Update an item by ID | ||
router.put('/:id', itemController.updateItem); | ||
|
||
// Delete an item by ID | ||
router.delete('/:id', itemController.deleteItem); | ||
|
||
module.exports = router; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
// Example utility function for standard responses | ||
const sendResponse = (res, status, data) => { | ||
res.status(status).json(data); | ||
}; | ||
|
||
module.exports = { sendResponse }; |