[Project-完了]ポートフォリオ共有サイトジェネレータ
👨🎓 プロジェクトの進捗
プロジェクトはシリーズ記事でまとめたように、毎朝scrumで開発スケジュールを調整し、追加する機能について議論します.
Gitlabによるコラボレーションにより,独自の開発度合いや目標などをホットスポットやマイルストーン的に管理した.
🔎 検索機能
検索機能はMongoose ODMを使用し、ユーザー名、技術スタックに検索語が存在するかどうかは、正規表現で大文字と小文字を区別せずに検索できます.
このとき,検索を行う際には,複数のクエリが同時に検索されないように$or演算子も用いられる.
🎨 イメージアップロード機能
画像アップロード機能はMultierを用いて実現した.
DBではMultierのdiskSteroageを使用して現在時刻とファイル名を統合し、カスタム写真名を保存し、実際の写真データをimagesフォルダに保存します.
このときenvファイルからパスがロードされ、配置環境と開発環境に異なる環境変数「イメージフォルダパス」が設定されます.
📬 パスワード検索機能の実装[nodemailer]
パスワード検索機能は
nodemailer
モジュールを用いて実現される.🚳 ミドルウェア構成
リクエストを受信すると、検証に正しい値があるかどうかを確認するために検証ミドルウェアが作成されます.
function checkProjectCreated(req, res, next) {
const fields = ["title", "description", "from", "to"];
const body = Object.keys(req.body);
const check = fields.filter((field) => !body.includes(field));
if (check.length) {
return res.status(400).json({
success: false,
error: {
code: 400,
message: `${check.join(", ")} 은(는) 필수로 입력해줘야 합니다.`,
},
});
}
next();
}
最初は、リクエスト内のbody、query、parameterなどを検証するベリファイアを作成しましたが、その後、検証ミドルウェアをより簡単に、より直感的に作成できます.express-validator
を知り、コードを変更しました.const validate = (req, res, next) => {
const errors = validationResult(req);
if (errors.isEmpty()) {
return next();
}
return res.status(400).json({
success: false,
error: {
code: 400,
message: errors.array()[0].msg,
detail: errors.errors,
},
});
};
const checkUserCreated = [
body("name")
.exists()
.withMessage("이름을 입력해주세요.")
.bail()
.isLength({ min: 2 })
.withMessage("이름은 필수로 2 글자 이상 입력해야 합니다!")
.bail(),
body("email")
.exists()
.withMessage("이메일을 입력해주세요.")
.bail()
.isEmail()
.withMessage("올바른 이메일을 입력해주세요.")
.bail(),
body("password")
.exists()
.withMessage("비밀번호를 입력해주세요.")
.bail()
.isLength({ min: 4 })
.withMessage("비밀번호는 4글자 이상이어야 합니다."),
validate,
];
変更したコードは上のコードと同じです.コードの長さが減少していないのを見ると、どのコードがもっと簡単で、もっと良いのか分からないかもしれませんが、コードだけを見て、どの値が必要なのか分かりません.どの値がどのような条件を通過する必要があるのか一目で分かるので、検証ロジックの利点を直感的に理解して使うべきだと思います!
💬 実施経験部分
経験部分の体現では、他の場所での体現と何の違いもありません.
しかし
Mongoose ODM
のpopulate
とsort
が最も適切に使われている部分であることから紹介に入れられた. static async findAll({ userId }) {
const user = await UserModel.findOne({ id: userId });
const careers = await CareerModel.find(
{ author: user },
{ _id: false, __v: false }
).populate('author', 'id -_id').sort({ fromDate: 1, toDate: 1 });
return careers;
}
Mongoose
においてsort
を達成するために、sort
または1
の値を上記のように0
に加えてもよい.上記のコードのように
1
を入れると、昇順に並べ替えられます.🎇 あれやこれや
上記の機能以外にも、いろいろな機能を実現しようと努力していましたが、紹介するほどではなく、ここに置いておきました!
他の部分のコードを知りたい場合や、どのように動作しているかを知りたい場合は、
https://github.com/Shin-GC/OurPortfolioServiceProject.git
上記の住所の
github
備考を参考にすればいいです!🖥💻 チームメンバーとプロジェクトを行った感想集
新鉱川
Back
コミュニケーションと構造が重要なプロジェクトだと思います!確かに、作業を開始する前に、毎朝scrumでそれぞれの進捗状況に従って機能を追加するかどうかを確認します.これらは成功し、データ構造部分は何度も修正されています.構造が確定すれば、お客様チームメンバーの修正作業量は減少します.この2つのプロジェクトがこのプロジェクトを行う過程で最も重要なのは、私たちのコード修正も最小化できるので、もう1つの機能を増やすことができると思います.🙂
back**
Front
一番大切なのは爱情だと思います!プロジェクトを愛してこそ、それをする意欲が生まれ、それぞれの責任を負う部分にも自信が生まれ、より良いアイデアプロジェクトを創造することができると思います.だから私たちの今回のプロジェクトは順調に進んでいるでしょう.みんなは今回のプロジェクトが好きで、共通の目標にそれぞれの考えを加えて、結果はとても良い成果が出ました!朴**
Front
協力の中で最も重要なのはコミュニケーションです.チームメンバーと一緒に問題を解決することは、一人で問題を解決するよりも重要だと思います(効率的で多視点な解決方法を学ぶ)
のり*
back
私の言いたいことはすべて言って、何の役にも立たないが、私は信頼が重要だと思います.私はフロントが私の創造した機能をよく体現すると信じて、私は私の責任ある仕事の自信をよくすることができて、5人が集まって何でもできる自信は、プロジェクトを行う時に挑戦する原動力になりました.Reference
この問題について([Project-完了]ポートフォリオ共有サイトジェネレータ), 我々は、より多くの情報をここで見つけました https://velog.io/@soshin_dev/Project-완성-포트폴리오-공유-사이트-제작기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol