728x90
Node.js Express 노드JS 익스프레스 시작하기
- npm을 통해 Express를 설치합니다.
npm install express
그럼 자동으로 node_modules폴더와 package.json, package-lock.json이 생깁니다.
- 기본 폴더 구조
project/
│
├── node_modules/ # npm으로 설치한 외부 패키지들이 저장되는 폴더입니다.
├── src/ # 소스 코드가 위치하는 주요 폴더입니다
│ ├── controllers/ # 요청을 처리하고 응답을 생성하는 컨트롤러 파일들이 위치합니다.
│ ├── models/ # 데이터 모델과 관련된 파일들이 위치합니다.
│ ├── routes/ # 라우팅 설정 파일들이 위치합니다.
│ ├── services/ # 비즈니스 로직을 처리하는 서비스 파일들이 위치합니다.
│ └── utils/ # 유틸리티 함수들이 모여 있습니다.
│ └── app.js # 애플리케이션의 주 진입점입니다.
├── tests/ # 단위 테스트, 통합 테스트 등 테스트 관련 파일들이 위치합니다.
├── public/ # 정적 파일들(CSS, JavaScript, 이미지 등)이 위치합니다.
│ ├── css/ # CSS 파일이 위치합니다.
│ ├── js/ # JavaScript 파일이 위치합니다.
│ └── images/ # 이미지 파일이 위치합니다.
│ └── videos/ # 동영상 파일이 위치합니다.
├── views/ # 템플릿 엔진을 사용할 경우, 뷰 파일들이 위치합니다.
├── config/ # 설정 파일들이 위치합니다.
├── package.json # 프로젝트의 메타데이터와 의존성 정보가 포함된 파일입니다.
├── package-lock.json # 의존성 트리의 정확한 버전을 기록하는 파일입니다.
├── .env # 환경 변수 설정 파일입니다.
└── README.md # 프로젝트에 대한 설명과 사용 방법 등을 기술하는 파일입니다.
- Node.js 프로젝트의 구조와 각 파일의 기본 로직 1
src/app.js
const express = require('express');
const dotenv = require('dotenv');
const routes = require('./routes');
dotenv.config();
const app = express();
app.use(express.json());
app.use('/api', routes);
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
src/routes/userRoutes.js
const express = require('express');
const userController = require('../controllers/userController');
const router = express.Router();
router.get('/users', userController.getUsers);
router.post('/users', userController.createUser);
module.exports = router;
src/controllers/userController.js
const userService = require('../services/userService');
exports.getUsers = async (req, res) => {
try {
const users = await userService.getUsers();
res.json(users);
} catch (error) {
res.status(500).json({ message: error.message });
}
};
exports.createUser = async (req, res) => {
try {
const user = await userService.createUser(req.body);
res.status(201).json(user);
} catch (error) {
res.status(400).json({ message: error.message });
}
};
src/services/userService.js
const User = require('../models/user');
exports.getUsers = async () => {
return await User.find();
};
exports.createUser = async (userData) => {
const user = new User(userData);
return await user.save();
};
src/models/user.js
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
createdAt: { type: Date, default: Date.now }
});
module.exports = mongoose.model('User', userSchema);
src/utils/logger.js
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
module.exports = logger;
config/database.js
const mongoose = require('mongoose');
const connectDB = async () => {
try {
await mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
});
console.log('MongoDB connected');
} catch (error) {
console.error('MongoDB connection error:', error);
process.exit(1);
}
};
module.exports = connectDB;
.env
PORT=3000
MONGO_URI=mongodb://localhost:27017/myapp
NODE_ENV=development
- Node.js 프로젝트의 구조와 각 파일의 기본 로직 2
src/app.js
// src/app.js
require('dotenv').config();
const express = require('express');
const app = express();
const routes = require('./routes');
const connectDB = require('../config/database');
// 데이터베이스 연결
connectDB();
// 미들웨어 설정
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 정적 파일 제공
app.use(express.static('public'));
// 라우팅 설정
app.use('/', routes);
// 오류 처리 미들웨어
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('서버 오류가 발생했습니다.');
});
// 서버 시작
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`서버가 ${PORT} 포트에서 실행 중입니다.`);
});
src/routes/index.js
// src/routes/index.js
const express = require('express');
const router = express.Router();
const userRoutes = require('./userRoutes');
router.use('/users', userRoutes);
module.exports = router;
src/routes/userRoutes.js
// src/routes/userRoutes.js
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');
router.get('/', userController.getAllUsers);
router.post('/', userController.createUser);
module.exports = router;
src/controllers/userController.js
// src/controllers/userController.js
const userService = require('../services/userService');
exports.getAllUsers = async (req, res) => {
try {
const users = await userService.getAllUsers();
res.json(users);
} catch (err) {
res.status(500).send(err.message);
}
};
exports.createUser = async (req, res) => {
try {
const newUser = await userService.createUser(req.body);
res.status(201).json(newUser);
} catch (err) {
res.status(500).send(err.message);
}
};
src/services/userService.js
// src/services/userService.js
const User = require('../models/User');
exports.getAllUsers = async () => {
return await User.find();
};
exports.createUser = async (userData) => {
const user = new User(userData);
return await user.save();
};
src/models/user.js
// src/models/User.js
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true },
password: { type: String, required: true },
createdAt: { type: Date, default: Date.now },
});
module.exports = mongoose.model('User', userSchema);
src/utils/validator.js
// src/utils/validator.js
exports.validateEmail = (email) => {
const re = /\S+@\S+\.\S+/;
return re.test(email);
};
config/database.js
// config/database.js
const mongoose = require('mongoose');
const connectDB = async () => {
try {
await mongoose.connect(process.env.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
console.log('MongoDB에 연결되었습니다.');
} catch (err) {
console.error(err.message);
process.exit(1);
}
};
module.exports = connectDB;
.env
PORT=3000
MONGODB_URI=mongodb://localhost:27017/mydatabase
==========
==========
728x90
'nodejs' 카테고리의 다른 글
파이어베이스(firebase) 초기 설정 시작 방법 (0) | 2025.03.27 |
---|---|
노드js에서 로그인 기능 구현하기 (0) | 2023.10.03 |
nodejs express routes 추가 방법 (0) | 2023.09.29 |
nodejs express 기본 세팅 시작하기 (0) | 2023.09.29 |
노드js에서 db 연결방법 (0) | 2023.09.29 |