방명록
- [개발자의품격][부트캠프][1기][31차시] Node.js #7 | morgan(로그 관리) | nodemailer(메일 제어)2022년 04월 11일 18시 26분 08초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
| morgan
시스템에서 발생한 로그를 관리한다. 실무에서 운영할 때는 로그를 파일로 관리한다. 다음과 같이 해당 모듈을 설치한다.
npm install morgan
npm install rotating-file-stream
log폴더를 생성하고 날짜 폴더(예: 202204)를 생성한다. (날짜 폴더가 없을 경우 에러가 발생했다.)
// 18_morgan.js const express = require("express"); const app = express(); const fs = require("fs"); // 로그를 파일로 기록하기 위해 필요 const morgan = require("morgan"); // morgan const rfs = require("rotating-file-stream"); // 자동으로 로그 파일을 채번해서 만들어 줌 const path = require("path"); // 파일명을 만드는 함수 const generator = (time, index) => { if (!time) return "file.log"; // 시간 정보가 없을 때 기본 파일명 const yearmonth = time.getFullYear() + (time.getMonth() + 1).toString().padStart(2, "0"); const day = time.getDate().toString().padStart(2, "0"); const hour = time.getHours().toString().padStart(2, "0"); const minute = time.getMinutes().toString().padStart(2, "0"); return `${yearmonth}/${yearmonth}${day}-${hour}${minute}-${index}-file.log`; }; const accessLogStream = rfs.createStream(generator, { interval: "1m", // 1m은 1분 간격, 실무에서는 1d 하루 단위를 주로 사용 size: "10M", // 파일의 최대 사이즈 path: path.join(__dirname, "log"), // 현재 디렉토리(__dirname)의 log 폴더에 로그 파일 생성 }); app.use(morgan("combined", { stream: accessLogStream })); // combined는 로그를 남기는 기본 포맷 중 하나 // 400번 이상의 에러가 발생했을 때 로그 기록함 // app.use( // morgan("combined", { // stream: accessLogStream, // skip: function (req, res) { // return res.statusCode < 400; // }, // }) // ); app.get("/", (req, res) => { res.send("Hello World"); }); app.listen(3000, () => { console.log("서버가 포트 3000번으로 시작되었습니다."); });
| nodemailer
메일을 제어하는 모듈이다. 다음과 같이 모듈을 설치한다.
npm install nodemailer
실습을 위해서 구글 메일에서 앱키를 받아야 한다.
// nodemailer/index.js const nodemailer = require("nodemailer"); // 교재 261 const config = { service: "gmail", host: "smtp.gmail.com", port: 587, secure: false, auth: { user: process.env.GOOGLE_MAIL, pass: process.env.GOOGLE_PASSWORD, }, }; const send = async (data) => { const transporter = nodemailer.createTransport(config); transporter.sendMail(data, (err, info) => { if (err) { console.log(err); } else { return info.response; } }); }; module.exports = { send, };
// 19_nodemailer.js const express = require("express"); const app = express(); // console.log(app.get("env")); require("dotenv").config({ path: `nodemailer/.env` }); const nodemailer = require("./nodemailer"); // console.log(process.env); app.use( express.json({ limit: "50mb", // 최대 50메가 }) ); // 클라이언트 요청 body를 json으로 파싱 처리 app.listen(3000, () => { console.log("서버가 포트 3000번으로 시작되었습니다."); }); app.post("/api/email", async (req, res) => { console.log(req.body.param); const r = await nodemailer.send(req.body.param); res.send(r); });
728x90반응형'영광의 시대! > 2022 개발자의 품격 부트캠프 1기' 카테고리의 다른 글
다음글이 없습니다.이전글이 없습니다.댓글