Putem observa dimensiunea fișierului index.js crește considerabil după fiecare nou endpoint pe care îl definim. Desigur, această metodă de definire a endpoint-urilor nu este optimă. Din fericire, NodeJS + Express ne oferă posibilitatea de a organiza rutele cu ajutorul unor Routere.
Creați un director nou in root-ul proiectului, îl vom denumi routers. În interiorul lui, creați fișierul messagesRouter.js
Cut and Paste funcțiilor app.get() și app.post() din index.js. De asemenea, Cut and Paste importurilor de care avem nevoie (mysql, connection (ATENȚIE - se va schimba path-ul relativ pentru db.js))
Înlocuim app cu router. Putem de asemenea să ștergem "/messages", vom preciza calea default a router-ului nostru in index.js
Exportăm router-ul la final
// messagesRouter.js
module.exports = router;
Codul până în acest punct cu toate endpoint-urile initiale (GET, GET/id, POST/ PUT/ DELETE) definite
// messagesRouter.js
const connection = require("../db.js");
const mysql = require("mysql");
const express = require("express");
const router = express.Router();
router.get("/", (req, res) => {
connection.query("SELECT * FROM messages", (err, results) => {
if (err) {
return res.send(err);
}
return res.json({
messages: results,
});
});
});
router.post("/", (req, res) => {
const { senderName, senderMail, receiverMail, messageContent } = req.body;
if (!senderName || !senderMail || !receiverMail || !messageContent || !language) {
// send bad request error
return res.status(400).send("Bad request. Missing parametres.");
}
const queryString = `INSERT INTO messages (senderName, senderMail, receiverMail, messageContent) VALUES (${mysql.escape(
senderName
)}, ${mysql.escape(senderMail)}, ${mysql.escape(
receiverMail
)}, ${mysql.escape(messageContent)})`;
connection.query(queryString, (err, results) => {
if (err) {
return res.send(err);
}
return res.json({
data: results,
});
});
});
// Add get by id route
router.get("/:id", (req, res) => {
const { id } = req.params;
if (!id) {
// send bad request error
return res.status(400).send("Bad request. Missing parametres.");
}
const queryString = `SELECT * FROM messages WHERE entryID = ${mysql.escape(id)}`;
connection.query(queryString, (err, results) => {
if (err) {
return res.send(err);
}
if (results.length === 0) {
return res.status(404).send("Message not found.");
}
return res.json({
messages: results,
});
}
);
}
);
// Add delete by id route
router.delete("/:id", (req, res) => {
const { id } = req.params;
if (!id) {
// send bad request error
return res.status(400).send("Bad request. Missing parametres.");
}
const queryString = `DELETE FROM messages WHERE entryID = ${mysql.escape(id)}`;
connection.query(queryString, (err, results) => {
if (err) {
return res.send(err);
}
if (results.length === 0) {
return res.status(404).send("Message not found.");
}
return res.json({
results,
});
}
);
}
);
// Add update by id route
router.put("/:id", (req, res) => {
const { id } = req.params;
if (!id) {
// send bad request error
return res.status(400).send("Bad request. Missing parametres.");
}
const { senderName, senderMail, receiverMail, messageContent } = req.body;
if (!senderName || !senderMail || !receiverMail || !messageContent) {
// send bad request error
return res.status(400).send("Bad request. Missing parametres.");
}
const queryString = `UPDATE messages SET senderName = ${mysql.escape(senderName)}, senderMail = ${mysql.escape(senderMail)}, receiverMail = ${mysql.escape(receiverMail)}, messageContent = ${mysql.escape(messageContent)} WHERE entryID = ${mysql.escape(id)}`;
connection.query(queryString, (err, results) => {
if (err) {
return res.send(err);
}
if (results.length === 0) {
return res.status(404).send("Message not found.");
}
return res.json({
results,
});
}
);
}
);
module.exports = router;
În fișierul index.js -> importam router-ul nou creat și precizăm faptul că app va folosi router-ul nou creat pe ruta /messages. Codul in index.js până în acest punct - am evidențiat liniile modificate cu un comentariu //look here
// index.js
const express = require("express");
const messagesRouter = require("./routers/messagesRouter"); //look here
const bodyParser = require("body-parser");
const app = express();
// for parsing application/json
app.use(bodyParser.json());
// for parsing application/xwww-
app.use(bodyParser.urlencoded({ extended: true }));
app.use('/messages', messagesRouter); //and look here too
const port = 8080;
app.listen(port, () => {
console.log(`Example app listening on port ${port}!`);
});