i have to run the npm command npm install express mongoose cors
then i am running database called studentsRecords with collection student having the following data
db.students.insertMany({id:1},{name:'John'},{id:2,name:'Doe'});
i want to display those data to my web browser with express only as i did on the code bellow , but it display errors (i.e does not fetch any of the given data from database) , how to fix the code so it can work properly?
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const app = express();
const port = process.env.PORT || 3000;
// Middleware
app.use(cors());
app.use(express.json());
// MongoDB connection
mongoose.connect('mongodb://localhost:27017/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true
});
// Schema and model
const Schema = mongoose.Schema;
const DataSchema = new Schema({
name: String
});
const Data = mongoose.model('Data', DataSchema);
// Route to fetch data by name and id
app.get('/data/', async (req, res) => {
try {
const { name } = req.params;
const data = await Data.find({ name: name }, { _id: 0, name: 1 });
if (!data || data.length === 0) {
return res.status(404).send('Data not found');
}
res.json(data);
} catch (err) {
console.error('Failed to fetch data', err);
res.status(500).send('Internal Server Error');
}
});
// Start server
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});
Version 2 of the code: A new route path for all is added.
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const app = express();
const port = process.env.PORT || 3000;
// Middleware
app.use(cors());
app.use(express.json());
// MongoDB connection
mongoose.connect('mongodb://localhost:27017/test');
// Schema and model
const Schema = mongoose.Schema;
const DataSchema = new Schema({
name: String,
});
const Data = mongoose.model('student', DataSchema);
// Route to fetch all
// IMPORTANT : keep this route path always on top of the other route path '/data/:name'
// else retrieval will fail.
app.get('/data/all', async (req, res) => {
try {
const data = await Data.find({}, { _id: 0, name: 1 });
if (!data || data.length === 0) {
return res.status(404).send('Data not found');
}
res.json(data);
} catch (err) {
console.error('Failed to fetch data', err);
res.status(500).send('Internal Server Error');
}
});
// Route to fetch data by name and id
app.get('/data/:name', async (req, res) => {
try {
const { name } = req.params;
const data = await Data.find({ name: name }, { _id: 0, name: 1 });
if (!data || data.length === 0) {
return res.status(404).send('Data not found');
}
res.json(data);
} catch (err) {
console.error('Failed to fetch data', err);
res.status(500).send('Internal Server Error');
}
});
// Start server
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});