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

Initial commit

parents
No related branches found
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