質問:Vue にブログ投稿をアップロードするためのフォームがあり、タイトル、本文、説明、スニペット、画像のスコープがあります。すべて必要です。これを処理するために Express で API を設定しました。 Postman でテストしたところ、問題なく動作しましたが、ブラウザ経由でファイルをデータベースに送信する方法がわかりません。 500 エラーが繰り返し発生し、データをコンソールに出力しても画像フィールドが空なので、それが問題であることは間違いないのですが、何が問題なのかがわかりません。 これは私のフロントエンドページの形式です: <テンプレート> <div class="コンテナ"> <div id="nav"> <adminnav/> </div> <div id="作成"> <h1>新しい投稿を作成</h1> </div> <div id="post"> <本文> <フォーム> <label for="title">タイトル: </label> <textarea v-model=formdata.title 行数="5" 列数="60" 名前="タイトル" placeholder="テキストを入力"> </テキストエリア> <br/> <label for="body">本文: </label> <textarea v-model=formdata.body 行数="5" 列数="60" 名前="本文" placeholder="テキストを入力"> </テキストエリア> <br/> <label for="description">説明: </label> <textarea v-model=formdata.description 行数="5" 列数="60" 名前="説明" placeholder="テキストを入力"> </テキストエリア> <br/> <label for="snippet">スニペット: </label> <textarea v-model=formdata.snippet 行数="5" 列数="60" 名前="スニペット" placeholder="テキストを入力"> </テキストエリア> <br/> <label for="file">写真をアップロード: </label> <入力 class="フォームコントロールファイル" タイプ="ファイル" accept="画像/*" v-bind="formdata.photo" /> <br/> <input id="submit" type="submit" value="submit" @click.prevent="createPost()"/> </フォーム> </本文> </div> </div> </テンプレート> <スクリプト> '../components/adminnav.vue' から adminnav をインポートします。 '../service/PostService' から PostService をインポートします。 エクスポートデフォルト{ 名前: 'createStory', コンポーネント: 管理者ナビ、 }, データ() { 戻る { フォームデータ: { タイトル: ''、 体: ''、 説明: ''、 スニペット: ''、 写真: null、 }, }; }, メソッド: { ポストを作成します(){ console.log(this.formdata); /* eslint 優先分割: 0 */ フォームデータ = this.formdata; PostService.createPost(フォームデータ) .then(() => { console.log('成功'); }); }, }, }; </スクリプト> これは POST リクエストです。 router.post("/add-story", upload.single('photo'), async(req, res) => { 試す{ post = new Post(); post.title = req.body.title; post.description = req.body.description; post.photo = 必要なファイルの場所; post.body = req.body.body; post.snippet = req.body.snippet; post.save() を待機します。 res.json({ ステータス: true、 メッセージ: 「正常に保存されました。」 }); } キャッチ(エラー) { res.status(500).json({ 成功: false、 メッセージ: エラーメッセージ }); } }); 回避策ファイル <input type="file" accept="image/*" class="form-control-file" @change="写真を更新($event.target.name、$event.target.files)" > すべてのデータを収集してリクエストを送信するコード // 残りのvueコンポーネントデータ(){ 戻る { タイトル: ''、 体: ''、 説明: ''、 スニペット: ''、 photo: {} // ファイルデータを保存します}; }, メソッド: { updatePhoto (ファイル) { if (!files.length) が返されます; //ファイルデータを保存する this.photo = { 名前: ファイル[0].名前、 データ: ファイル[0] }; }, ポストを作成します(){ formData を新しい FormData() にします。 formData.append('title', this.title); フォームデータを追加します。 formData.append('description', this.description); formData.append('スニペット', this.snippet); formData.append('photo', this.photo.data, this.photo.name); PostService.createPost(フォームデータ) .then(() => { console.log('成功'); }); } } // Vueコンポーネントの残り 明らかに、この質問とは無関係であると確信している vue コンポーネント構造全体や、リクエストを開始する前にファイル データが利用可能であることを確認するためのいくつかのチェックなど、多くのことを省略しました。これはファイル データを取得する方法についてのアイデアなので、この回答が参考になれば幸いです。 以上がVueフォームで画像を処理する方法の詳細です。Vueフォームで画像を処理する方法の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: 高同時実行シナリオにおける nginx 最適化の詳細な説明
PHPの仕組みまず、よく耳にするcgi、php-cgi、fastcgi、php-fpmの関係を理解し...
目次主キー制約ユニーク制約主キー制約PRIMARY KRY 主キーは一意です。テーブルには主キーを ...
序文コア機能のデフォルトの組み込みディレクティブ (v-model および v-show) に加えて...
目次1. NodeがHTTPサーバーを構築する2. HTTPサーバーがリクエストを取得する1. Po...
この記事では、VMware Workstation 14 Proにシステムをインストールする方法を紹...
目次1. 父から息子へ2. 息子から父へ3. 親子関係のないコンポーネントの値の転送4. ヴュークス...
目次1. オペレーター要約する1. オペレーター演算子は、代入、比較、算術演算などの機能を実装するた...
チェーンプログラミングの実装原理jQuery を使用すると、開発者は常にドット構文を使用して独自のメ...
目次1. Flinkの概要1.1 基本的な紹介1.2 アプリケーションシナリオ2. 環境の展開2.1...
WML (ワイヤレス マークアップ言語)。これは HTML から派生したマークアップ言語ですが、W...
1. CSS ボックスモデルボックスには、余白、境界線、パディング、コンテンツが含まれます境界線の接...
この記事では、MySQL 8.0.12のインストールされていないバージョンを設定して起動するための具...
序文以前フロントエンドを勉強していたとき、メタタグに対する私の理解はこの一文だけでした。 <メ...
目次1. 基本的な例2. 計算プロパティキャッシュとメソッド3. 計算プロパティセッター序文:通常、...
この記事では、Java接続MySQLの基礎となるカプセル化コードを参考までに紹介します。具体的な内容...