Repository navigation
Expand file tree
/
Copy pathserver.js
More file actions
183 lines (162 loc) · 6.6 KB
/
Copy pathserver.js
File metadata and controls
183 lines (162 loc) · 6.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
const fs = require("fs");
const express = require("express");
const bodyParser = require("body-parser");
const { exec } = require("child_process");
const { DOMParser, XMLSerializer } = require("xmldom");
const xpath = require("xpath");
<<<<<<< HEAD
=======
const xmlFilePath =
"C:/Users/Aures/Desktop/XML-Database-With-CRUD-Table-master/movieDatabase.xml";
>>>>>>> a2e79d3 (second commit)
const app = express();
app.use(bodyParser.json());
app.use(express.static("public")); // Serve static files from the 'public' directory
// Load XML data
function loadXMLData() {
const xmlData = fs.readFileSync("movieDatabase.xml", "utf8");
return new DOMParser().parseFromString(xmlData, "text/xml");
}
<<<<<<< HEAD
=======
function saveXMLData(xmlDoc) {
const xmlString = new XMLSerializer().serializeToString(xmlDoc);
fs.writeFileSync("movieDatabase.xml", xmlString, "utf8");
}
>>>>>>> a2e79d3 (second commit)
// Execute XQuery
app.post("/execute-xquery", (req, res) => {
const { query } = req.body;
// Construct the command to execute XQuery
<<<<<<< HEAD
const command = `xbase --query "${query}"`; // Adjust this command based on your XBase setup
=======
const command = `basex -i "${xmlFilePath}" --query "${query}"`;
>>>>>>> a2e79d3 (second commit)
exec(command, (error, stdout, stderr) => {
if (error) {
console.error(`Error executing XQuery: ${error.message}`);
return res.status(500).json({ error: error.message });
}
if (stderr) {
console.error(`Error: ${stderr}`);
return res.status(500).json({ error: stderr });
}
console.log(`XQuery Results: ${stdout}`);
// Send the results back as JSON
res.json({ results: stdout });
});
});
// Get all movies
app.get("/movies", (req, res) => {
const xmlDoc = loadXMLData();
const movies = xpath.select("//movie", xmlDoc);
const movieList = movies.map((movie) => ({
id: movie.getElementsByTagName("movie_id")[0].textContent,
title: movie.getElementsByTagName("title")[0].textContent,
releaseYear: movie.getElementsByTagName("release_year")[0].textContent,
genre: movie.getElementsByTagName("genre")[0].textContent,
duration: movie.getElementsByTagName("duration")[0].textContent,
directorId: movie.getElementsByTagName("director_id")[0].textContent,
rating: movie.getElementsByTagName("rating")[0].textContent,
}));
res.json(movieList);
});
// Get a specific movie by ID
app.get("/movies/:id", (req, res) => {
const movieId = req.params.id;
const xmlDoc = loadXMLData();
const movie = xpath.select1(`//movie[movie_id='${movieId}']`, xmlDoc);
if (movie) {
const movieData = {
id: movie.getElementsByTagName("movie_id")[0].textContent,
title: movie.getElementsByTagName("title")[0].textContent,
releaseYear: movie.getElementsByTagName("release_year")[0].textContent,
genre: movie.getElementsByTagName("genre")[0].textContent,
duration: movie.getElementsByTagName("duration")[0].textContent,
directorId: movie.getElementsByTagName("director_id")[0].textContent,
rating: movie.getElementsByTagName("rating")[0].textContent,
};
res.json(movieData);
} else {
res.status(404).send("Movie not found");
}
});
// Add or update a movie
app.post("/movies", (req, res) => {
const { id, title, releaseYear, genre, duration, directorId, rating } =
req.body;
const xmlDoc = loadXMLData();
let movie = xpath.select1(`//movie[movie_id='${id}']`, xmlDoc);
if (movie) {
// Update existing movie
movie.getElementsByTagName("title")[0].textContent = title;
movie.getElementsByTagName("release_year")[0].textContent = releaseYear;
movie.getElementsByTagName("genre")[0].textContent = genre;
movie.getElementsByTagName("duration")[0].textContent = duration;
movie.getElementsByTagName("director_id")[0].textContent = directorId;
movie.getElementsByTagName("rating")[0].textContent = rating;
} else {
// Add new movie
const newMovie = xmlDoc.createElement("movie");
const movieIdElem = xmlDoc.createElement("movie_id");
movieIdElem.textContent = id;
newMovie.appendChild(movieIdElem);
const titleElem = xmlDoc.createElement("title");
titleElem.textContent = title;
newMovie.appendChild(titleElem);
const yearElem = xmlDoc.createElement("release_year");
yearElem.textContent = releaseYear;
newMovie.appendChild(yearElem);
const genreElem = xmlDoc.createElement("genre");
genreElem.textContent = genre;
newMovie.appendChild(genreElem);
const durationElem = xmlDoc.createElement("duration");
durationElem.textContent = duration;
newMovie.appendChild(durationElem);
const directorElem = xmlDoc.createElement("director_id");
directorElem.textContent = directorId;
newMovie.appendChild(directorElem);
const ratingElem = xmlDoc.createElement("rating");
ratingElem.textContent = rating;
newMovie.appendChild(ratingElem);
xmlDoc.getElementsByTagName("movies")[0].appendChild(newMovie);
}
saveXMLData(xmlDoc);
res.sendStatus(200);
});
// Delete a movie
app.delete("/movies/:id", (req, res) => {
const xmlDoc = loadXMLData();
const movie = xpath.select1(`//movie[movie_id="${req.params.id}"]`, xmlDoc);
if (movie) {
movie.parentNode.removeChild(movie);
saveXMLData(xmlDoc);
res.sendStatus(200);
} else {
res.sendStatus(404);
}
});
// Remove the exec command section
app.post("/execute-xquery", (req, res) => {
const xquery = req.body.query; // Get the XQuery from the request body
console.log("Received XQuery:", xquery);
const xmlDoc = loadXMLData(); // Load your XML data
const nodes = xpath.select(xquery, xmlDoc); // Execute the XQuery (XPath)
if (!nodes || nodes.length === 0) {
console.log("No results found for the query.");
return res.status(404).json({ error: "No results found" });
}
const results = nodes.map((node) => ({
id: node.getElementsByTagName("movie_id")[0].textContent,
title: node.getElementsByTagName("title")[0].textContent,
releaseYear: node.getElementsByTagName("release_year")[0].textContent,
genre: node.getElementsByTagName("genre")[0].textContent,
duration: node.getElementsByTagName("duration")[0].textContent,
directorId: node.getElementsByTagName("director_id")[0].textContent,
rating: node.getElementsByTagName("rating")[0].textContent,
}));
console.log("Query results:", results); // Log the results
res.json(results); // Return the results as JSON
});
app.listen(3000, () => console.log("Server running on port 3000"));