Dezvoltare Backend - rute*
1. GET /messages
Din pașii trecuți, metoda GET /messages arată astfel
app.get("/messages", (req, res) => {
connection.query("SELECT * FROM messages", (err, results) => {
if (err) {
return res.send(err);
}
return res.json({
messages: results,
});
});
});
2. POST /messages
Pentru a implementa metoda POST /messages, vom instala și pachetul body-parser. ( npm install ... ).
Vom utiliza mai multe metode de procesare a body-ului trimis prin metoda POST, așa că vom transmite aplicației express următoarele instrucțiuni
// index.js
const bodyParser = require("body-parser");
// for parsing application/json
app.use(bodyParser.json());
// for parsing application/xwww-
app.use(bodyParser.urlencoded({ extended: true }));
Inițializăm și metoda POST /messages și aplicăm metoda mysql.escape() pe datele primite pentru a proteja baza de date de atacuri de tip injection
// index.js
app.post("/messages", (req, res) => {
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 = `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,
});
});
});
* Crearea unui Express Router
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))
Definim routerul pe care îl vom exporta
// messagesRouter.js
const router = express.Router();
Î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}!`);
});
Last updated