Skip to content
Snippets Groups Projects
Commit 9c561418 authored by Nitesh Verma's avatar Nitesh Verma
Browse files

Initial commit

parents
Branches
No related tags found
No related merge requests found
# Ignore Node.js dependencies
node_modules/
# Ignore environment files
.env
# Ignore logs
logs/
*.log
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true }
});
module.exports = mongoose.model('User', UserSchema);
This diff is collapsed.
{
"name": "express-mongo-api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"dotenv": "^16.4.7",
"express": "^4.21.2",
"mongoose": "^8.13.0",
"winston": "^3.17.0"
},
"devDependencies": {
"jest": "^29.7.0",
"supertest": "^7.1.0"
}
}
const express = require('express');
const User = require('../models/user');
const winston = require('winston');
const router = express.Router();
// Logger
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'logs/app.log' })
]
});
// CREATE User
router.post('/', async (req, res) => {
try {
const { name, email } = req.body;
const user = new User({ name, email });
await user.save();
logger.info(`User created: ${email}`);
res.status(201).json(user);
} catch (error) {
logger.error('Error creating user:', error);
res.status(500).json({ error: 'Error creating user' });
}
});
// UPDATE User
router.put('/:id', async (req, res) => {
try {
const { name, email } = req.body;
const user = await User.findByIdAndUpdate(req.params.id, { name, email }, { new: true });
if (!user) {
return res.status(404).json({ error: 'User not found' });
}
logger.info(`User updated: ${req.params.id}`);
res.json(user);
} catch (error) {
logger.error('Error updating user:', error);
res.status(500).json({ error: 'Error updating user' });
}
});
// GET All Users
router.get('/', async (req, res) => {
try {
const users = await User.find();
logger.info('Fetched user list');
res.json(users);
} catch (error) {
logger.error('Error fetching users:', error);
res.status(500).json({ error: 'Error fetching users' });
}
});
module.exports = router;
require('dotenv').config();
const express = require('express');
const mongoose = require('mongoose');
const winston = require('winston');
// const userRoutes = require('./routes/userRoutes');
const userRoutes = require('./routes/userRoutes');
const app = express();
const port = process.env.PORT || 3000;
// Logger Configuration
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'logs/app.log' })
]
});
// Middleware
app.use(express.json());
app.use('/api/users', userRoutes);
// MongoDB Connection
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => logger.info('Connected to MongoDB'))
.catch(err => logger.error('MongoDB connection error:', err));
app.listen(port, () => {
logger.info(`Server running on port ${port}`);
});
module.exports = app; // Exporting for testing
const request = require('supertest');
const app = require('../server');
const mongoose = require('mongoose');
const User = require('../models/user');
describe('User API Tests', () => {
let userId;
beforeAll(async () => {
await mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
});
});
afterAll(async () => {
await User.deleteMany({});
await mongoose.connection.close();
});
test('Should create a user', async () => {
const response = await request(app).post('/api/users').send({
name: 'Nitesh Kumar Verma',
email: 'nitesh.verma@niveussolutions.com'
});
expect(response.status).toBe(201);
expect(response.body.name).toBe('Nitesh Kumar Verma');
userId = response.body._id;
});
test('Should update a user', async () => {
const response = await request(app).put(`/api/users/${userId}`).send({
name: 'Nitesh Updated',
email: 'nitesh.verma@niveussolutions.com'
});
expect(response.status).toBe(200);
expect(response.body.name).toBe('Nitesh Updated');
});
test('Should fetch all users', async () => {
const response = await request(app).get('/api/users');
expect(response.status).toBe(200);
expect(Array.isArray(response.body)).toBe(true);
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment