swagger-node에서 express-session 설정 & 사용하기
기본적으로 swagger-node는 express를 기반으로 동작합니다.
swagger-node는 API 용으로 이용하기 때문에 기본적으로 session을 발행하지 않습니다.
다만 필요에 따라 로그인 프로세스 구현을 하게 될 경우 다음 라이브러리를 이용해야 합니다.
app.js 코드에 다음과 같이 설정을 하면 세션을 이용할수 있습니다.
express 4.X 부터는 body-parser를 사용하지 않고 express에서 제공되는 것을 이용합니다. 또한 app.use(express.urlencoded({ extended: true })); 을 사용하면 fileupload 처리를 이전과 같이 사용할 수 없습니다. 아래 multer를 이용한 예제를 참고 하셔요.
app.use(
require("express-session")({
secret: "keyboard cat",
cookie: {
maxAge: 1000 * 60 * 60 , // 1 hour
},
resave: false,
saveUninitialized: false,
})
);
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
추가로 session 관리를 passport를 이용해서 쉽게 관리 할수 있습니다.
다음 예제는 SSO의 방식중 하나인 SAML으로 처리한 예제를 준비 하였습니다.
주요점은 passport는 express-session에서만 동작 하기 때문에 세션 설정을 잘해야 합니다.
Multer를 이용한 첨부 파일 uploade
app.use(express.urlencoded({ extended: true }));를 설정하면, formData를 바로 접근하지 못하게 됩니다. 이때 다음 샘플을 기준으로 첨부파일을 처리 할 수 있습니다.
// multer 설정
const multer = require("multer");
const storage = multer.diskStorage({
// upload path
destination: function (req, file, cb) {
cb(null, "tempfiles");
},
// 업로드된 파일 이름
filename: function (req, file, cb) {
cb(null, `${moment().format("YYYYMMDDHHmmssSSS")}${file.originalname}`);
},
});
const upload = multer({
storage: storage,
limits: { fileSize: 10 * 1024 * 1024 },
});
... 설정 처리
SwaggerExpress.create(config, function (err, swaggerExpress) {
if (err) {
throw err;
}
// swagger-node에서 미들웨어 처리 방법
app.use(
"/jira/attachments/upload",
upload.single("filepond"),
async (req, res, next) => {
try {
const file = req.file;
res.status(201).json({
status: "OK",
file_nm: file.originalname.normalize("NFC"),
file_path: file.filename,
});
} catch (e) {
logger.error(e);
res.status(400).json({ status: "ERROR", message: e });
}
}
);
});
주요 코드만 표기 하였습니다. 예제 코드 바로 보기의 app.js를 참고 하면 전체 코드를 작성하실수 있습니다.