ビューコピー#6 CRUD(2):UPLOAD(EDIT)
🔖 レッスン範囲:6.20~24
Preview
の毎日のデータのtitle、description、hashtagsを要求します.bodyが受け取った値に変更すると video.save()で終わります. がこの方法を使用する場合.save()機能が追加されていないことを確認できます.findByIdAndUpdate()は、変更された情報を自動的にサーバに格納します. は便利ですが、保存する前に=>ミドルウェアを使用して情報が正しいかどうかを入力する機能が必要です.モンゴル語でサポートされているミドルウェア機能について説明します.
モンゴルのミドルウェア公式doc:https://mongoosejs.com/docs/middleware.html#middleware(👉 まず読んでから、以下の操作を行います)
2つの方法があります.
1)モンゴル語のミドルウェア(ミドルウェア)機能を使用する
2)モンゴルの静的(静的)機能を使用する
ミドルウェアは、データモデルを作成するファイルによって作成されます.データモデルを作成する前に作成する必要があります.は、フォームにsubmitが設定された後、constrolrでdebeに各種情報が設定されて「保存」される前に、上記ミドルウェアが自分の役割を挿入して実行する「保存」である. の問題は、同じフォームsubmitであっても、アップロード、すなわちモデルが可能であることである.create()の場合、これらのミドルウェアは使用できますが、画面(モデル)を編集します.findByIdAndUpadte()は、ミドルウェアが正常に動作しているかどうかを確認する可能性があります.
=>モデルが原因です.findByIdAndUpadate()は、4つのミドルウェアのクエリミドルウェアです.findOneAndUpdate()を読み込みます.findOneAndUpdate()はドキュメントにアクセスできません.
.staticでは、データ型内でよく使用する関数を宣言し、使いやすくすることもできます.
基本的には関数宣言,import,export後に使用される原理である.ただし、import、exportを必要とせず、宣言された関数名のみを使用すると便利です.
使用方法
1) new mongoose.Schema()を指定した後、Mongoose.model()が指定される前に以下のようにします.構文の詳細については、サイトを参照してください. join() コード:“BABEL PARSE ERROR”,原因コード:解析“UnexpectedReservicedWord”
:通常awaitを書くときにパラメータasyncを忘れた場合、このエラーが発生します. .startsWitdh("") ? : サーバからデータをロードする様々なMongooseメソッド .findOne(filter) vs. .findById(id):サーバからデータオブジェクトをロードします.findOneは自分でいろいろな条件を作ることができます.findById()はidで見つけることができます. .≪エクスポート|Export|emdw≫:サーバーから実際のオブジェクトをロードするのではなく、true/false値を返します. Middleware ミドルウェア(preまたはpost hookとも呼ばれる)は、非同期関数の実行中に制御を伝達する関数である.
モンゴル語には、ドキュメントミドルウェア、モデルミドルウェア、集約ミドルウェア、queryミドルウェアの4つのミドルウェアがあります.
https://mongoosejs.com/docs/middleware.html#middleware
モデルミドルウェアがサポートする機能
document middleware関数では、現在のドキュメントを参照します.https://mongoosejs.com/docs/middleware.html#types-of-middleware
データベースから完全なビデオを削除(2021.10.08)
db.videos.remove({})が破棄されたと表示された場合、
db.videos.deleteMany({})を使用して、ビデオ全体を削除します.
Pre
注意!preのコールバック関数に矢印関数を書き込むと、このターゲットは異なるのでfunction(){}に書き込む必要があります.
Statics
モデルに静的関数を追加することもできます.
モードでコンパイルされたモデルに静的「class」メソッドを追加します.
Staticを使用する2つの方法
サマリ
Preview
過去の時間はイタチSchema, mongoose.Model, mongoose.find, mongoose.CRUDのC,R部分を学び,findByIdなど多様なモンゴル語の手法を用いてデータを生成し,サーバにデータを格納し,データを再格納する.この過程でcallback関数とpromise構文も理解した.
watchページを作成するC、R機能の作成方法を学習した以上、
editページを作成し、U(update)機能の追加方法を学習します.
レッスン内容
1. getEdit
getEditページを作成します.export const getEdit = async (req, res) => {
const { id } = req.params; // const id = req.params.id; 의 es6 버전.
const video = await Video.findById(id);
if (!video) {
return res.render("404", { pageTitle : "404, Not Found"});
}
return res.render("edit", { pageTitle : `Edit ${video.title}`, video });
}
2. postEdit
PostEditページを作成して、データの変更を変更します.
2つの方法があります.
1)データベースから直接格納される値とreq.bodyに送信された値を取得し、変更します.
2) .findByIdAndUpadte(id,{修正する:修正})モンゴルメソッドの使用方法
2.1.1第一の方法:直接修正+。save()
// videoController.js
export const postEdit = async (req, res) => {
const { id } = req.params;
const { title, description, hashtags } = req.body;
const video = await Video.findById(id);
if (!video) {
return res.render("404", { pageTitle: "Video not found." });
}
video.title = title;
video.description = description;
video.hashtags = hashtags
.split(",")
.map((word) => (word.startsWith("#") ? word : `#${word}`));
await video.save();
return res.redirect(`/videos/${id}`);
};
1. getEdit
getEditページを作成します.
export const getEdit = async (req, res) => {
const { id } = req.params; // const id = req.params.id; 의 es6 버전.
const video = await Video.findById(id);
if (!video) {
return res.render("404", { pageTitle : "404, Not Found"});
}
return res.render("edit", { pageTitle : `Edit ${video.title}`, video });
}
2. postEdit
PostEditページを作成して、データの変更を変更します.
2つの方法があります.
1)データベースから直接格納される値とreq.bodyに送信された値を取得し、変更します.
2) .findByIdAndUpadte(id,{修正する:修正})モンゴルメソッドの使用方法
2.1.1第一の方法:直接修正+。save()
// videoController.js
export const postEdit = async (req, res) => {
const { id } = req.params;
const { title, description, hashtags } = req.body;
const video = await Video.findById(id);
if (!video) {
return res.render("404", { pageTitle: "Video not found." });
}
video.title = title;
video.description = description;
video.hashtags = hashtags
.split(",")
.map((word) => (word.startsWith("#") ? word : `#${word}`));
await video.save();
return res.redirect(`/videos/${id}`);
};
2.1.2第2の方法:モンス関数を使用する:。findByIdAndUpadte() 🌟
// videoController.js
export const postEdit = async (req, res) => {
const { id } = req.params;
const { title, description, hashtags } = req.body;
const video = await Video.findById(id);
if (!video) {
return res.render("404", { pageTitle: "Video not found." });
}
await Video.findByIdAndUpdate(id, {
title,
description,
hashtags: hashtags
.split(",")
.map((word) => (word.startsWith("#") ? word : `#${word}`)),
});
return res.redirect(`/videos/${id}`);
};
モンゴルのミドルウェア公式doc:https://mongoosejs.com/docs/middleware.html#middleware(👉 まず読んでから、以下の操作を行います)
2.2.0預け入れ検査機能の追加
2つの方法があります.
1)モンゴル語のミドルウェア(ミドルウェア)機能を使用する
2)モンゴルの静的(静的)機能を使用する
2.2.1保存検証:モンゴル文ミドルウェア、schema。pre()
ミドルウェアは、データモデルを作成するファイルによって作成されます.データモデルを作成する前に作成する必要があります.
//Video.js
videoSchema.pre("save", async function () {
해당 기능(여기선 save 기능) 을 사용하기 "전"(pre) 구현하고 싶은 기능 적기
});
//Video.js
videoSchema.pre('save', async function () {
this.hashtags = this.hashtags[0]
.split(",")
.map((word) => (word.startsWith("#") ? word : `#${word}`));
});
=>モデルが原因です.findByIdAndUpadate()は、4つのミドルウェアのクエリミドルウェアです.findOneAndUpdate()を読み込みます.findOneAndUpdate()はドキュメントにアクセスできません.
2.2.2保存前確認:モンゴルのStatic
.staticでは、データ型内でよく使用する関数を宣言し、使いやすくすることもできます.
基本的には関数宣言,import,export後に使用される原理である.ただし、import、exportを必要とせず、宣言された関数名のみを使用すると便利です.
使用方法
1) new mongoose.Schema()を指定した後、Mongoose.model()が指定される前に以下のようにします.構文の詳細については、サイトを参照してください.
Schema이름.static("함수명", function (인자) { 함수 커스터마이징 } );
2)関数のモデル名を使用します.関数名(パラメータ)を使用します.終わります.// 예를 들면,
// static function 선언 in Video.js
const videoSchema = new mongoose.Schema({
title: { type: String, required: true, uppercase: true },
description: { type: String, required: true },
createdAt: { type: Date, required:true , default: Date.now },
hashtags: [{type:String, trim:true}],
meta: {
views: { type: Number, default: 0 },
rating: { type: Number, default: 0 },
},
});
videoSchema.static("formatHashtags", function (hashtags) {
return hashtags
.split(",")
.map((word) => word.startsWith("#") ? word : `#${word}`)
});
const Video = mongoose.model("Video", videoSchema);
export default Video;
// static function 사용 in videoController.js
await Video.create ({
title,
description,
hashtags: Video.formatHashtags(hashtags),
});
追加学習?
:通常awaitを書くときにパラメータasyncを忘れた場合、このエラーが発生します.
モンゴル語には、ドキュメントミドルウェア、モデルミドルウェア、集約ミドルウェア、queryミドルウェアの4つのミドルウェアがあります.
https://mongoosejs.com/docs/middleware.html#middleware
モデルミドルウェアがサポートする機能
document middleware関数では、現在のドキュメントを参照します.https://mongoosejs.com/docs/middleware.html#types-of-middleware
データベースから完全なビデオを削除(2021.10.08)
db.videos.remove({})が破棄されたと表示された場合、
db.videos.deleteMany({})を使用して、ビデオ全体を削除します.
Pre
注意!preのコールバック関数に矢印関数を書き込むと、このターゲットは異なるのでfunction(){}に書き込む必要があります.
pre("save", async () => {}); (X)
https://mongoosejs.com/docs/middleware.html#pre Statics
モデルに静的関数を追加することもできます.
モードでコンパイルされたモデルに静的「class」メソッドを追加します.
Staticを使用する2つの方法
// Assign a function to the "statics" object of our animalSchema
animalSchema.statics.findByName = function(name) {
return this.find({ name: new RegExp(name, 'i') });
};
// Or, equivalently, you can call `animalSchema.static()`.
animalSchema.static('findByBreed', function(breed) { return this.find({ breed }); });
https://mongoosejs.com/docs/guide.html#statics サマリ
Reference
この問題について(ビューコピー#6 CRUD(2):UPLOAD(EDIT)), 我々は、より多くの情報をここで見つけました
https://velog.io/@jlee0505/유뷰트-클로닝-6-CRUD-2-UPLOADEDIT
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(ビューコピー#6 CRUD(2):UPLOAD(EDIT)), 我々は、より多くの情報をここで見つけました https://velog.io/@jlee0505/유뷰트-클로닝-6-CRUD-2-UPLOADEDITテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol