Request Types:
GET/POST/PATCH/DELETE
GET (fetching data):
app.get('/api/v1/tours', (req, res) => {
res.status(200).json({
status: 'success',
results: tours.length,
data: {
tours: tours,
},
});
};
POST (create new data):
app.post('/api/v1/tours', (req, res) => {
const newId = tours[tours.length - 1].id + 1;
//Getting the last ID number + 1
const newTour = Object.assign({ id: newId }, req.body);
tours.push(newTour);
fs.writeFile(
`${__dirname}/dev-data/data/tours-simple.json`,
JSON.stringify(tours),
(err) => {
res.status(201).json({
status: 'success',
data: {
tour: newTour,
},
});
}
);
};
PATCH (Edit Data):
app.patch('api/v1/tours/:id', (req, res) => {
const id = req.params.id * 1;
const tour = tours.find((tour) => tour.id === id);
if (!tour) {
return res.status(404).send({
status: 'fail',
message: 'Invalid ID',
});
}
const updatedTour = { ...tour, ...req.body };
const updatedTours = tours.map((tour) =>
tour.id === updatedTour.id ? updatedTour : tour
);
fs.writeFile(
`${__dirname}/dev-data/data/tours-simple.json`,
JSON.stringify(updatedTours),
(err) => {
res.status(200).send({
status: 'success',
data: updatedTour,
});
}
);
};
:id URL parameter
DELETE (Delete Data)
app.delete('/api/v1/tours/:id', (req, res) => {
const id = req.params.id * 1;
const tour = tours.find((tour) => tour.id === id);
if (!tour) {
return res.status(404).send({
status: 'fail',
message: 'Invalid ID',
});
}
res.status(204).json({
status: 'success',
data: null,
});
};
Make each request types into a function and use app.route('...').get('...').post('...') etc.
Ex):
const getAllTours = (req, res) => {
res.status(200).json({
status: 'success',
results: tours.length,
data: {
tours: tours,
},
});
};
const createTour = (req, res) => {
const newId = tours[tours.length - 1].id + 1;
const newTour = Object.assign({ id: newId }, req.body);
tours.push(newTour);
fs.writeFile(
`${__dirname}/dev-data/data/tours-simple.json`,
JSON.stringify(tours),
(err) => {
res.status(201).json({
status: 'success',
data: {
tour: newTour,
},
});
}
);
};
app.route('/api/v1/tours').get(getAllTours).post(createTour);
const getSpecificTour = (req, res) => {
console.log(req.params);
const id = req.params.id * 1;
const tour = tours.find((el) => el.id === parseInt(req.params.id));
const num_tours = tours.length;
if (!tour) {
return res.status(404).json({
status: 'fail',
message: 'Invalid ID',
});
}
res.status(200).json({
status: 'success',
data: {
tour: tour,
},
});
};
app.route('/api/v1/tours/:id').get(getSpecificTour);
Middleware declaration:
Ex)
app.use(express.json());
app.use((req, res, next) => {
req.requestTime = new Date().toISOString();
next();
//next() is REQUIRED
});