Nodejsファイルのアップロードとバックエンドのレンダリング

ファイルのアップロード

考えた

フロントエンドフォーム->バックエンドがファイル自体を受信->サーバーに保存->データベースファイルに情報を記録->ライブラリがnodejs関連情報に戻る-> nodejsがフロントエンドに戻る

前端:<input type = file enctype =“ multipart / form-data” name =“ fieldname”

アップロード方法

 app.use(objMulter.image())  //允许上传图片类型
 app.use(objMulter.any())    //允许上传什么类型的文件,any代表允许任何类型

実装
ここに画像の説明を挿入
Postmanソフトウェア送信インターフェイスと組み合わせて、画像が正常にアップロードされ、
ここに画像の説明を挿入
最終的にアドレスをクライアントに返すことができます

res.send({
        err:0,
        url:"http://localhost:3000/upload/" + req.files[0].filename +path.parse(req.files[0].originalname).ext 
    }) 

全体的なコードは次のとおりです。

const express = require("express")
const app = express()
const path = require("path") //引入path模块
const fs =require("fs")
app.listen(3000,()=>console.log("正在监听。。。"))

// 静态资源托管
// 如果用户想在浏览器上直接访问图片或者html页面,需要做一个静态服务器
app.use(express.static("./public"))

// 文件上传 前端上传一张图片,后端需要把图片存入upload文件夹里面
// 1.引入multer中间件
const multer = require("multer")

// 2.实例化multer
let objMulter = multer({dest:'./public/upload'});//data:指定保存位置

// 3.安装中间件
// app.use(objMulter.image())  允许上传图片类型
app.use(objMulter.any())    //允许上传什么类型的文件,any代表允许任何类型

app.post("/api/reg",(req,res)=>{
    // console.log(req.files);

    // 4.fs.renameSync("改前","改后")
    let oldFile = req.files[0].path     //更改前的名字
    let newFile = req.files[0].path+path.parse(req.files[0].originalname).ext   //更改后的名字
    fs.renameSync(oldFile,newFile)

    //5.把磁盘路径转为网络路径入库操作

    // 6.可以把地址返回给客户端
    res.send({
        err:0,
        url:"http://localhost:3000/upload/" + req.files[0].filename +path.parse(req.files[0].originalname).ext 
    }) 
}) 

フィールド名:フォーム名名前
originalname:アップロードされたファイル名
エンコーディング:エンコード方式
mimetype:ファイルタイプ
バッファー:ファイル自体の
サイズ:サイズ
宛先:保存パス
ファイル名:サフィックスなしの保存ファイル名
パス:保存ディスクパス+保存ファイル名前にサフィックス
multer は含まれていません->ファイル名はランダムになります-> fsモジュールの名前が変更されました->パスシステムモジュールはディスクパスを解決します

バックエンド:multerはフォームデータでエンコードされたデータを受け入れます

パスシステムモジュール

const path = require("path") //引入path模块

アップロードしたファイルの名前を変更する

app.post("/api/reg",(req,res)=>{
    // console.log(req.files);

    // 4.fs.renameSync("改前","改后")
    let oldFile = req.files[0].path     //更改前的名字
    let newFile = req.files[0].path+path.parse(req.files[0].originalname).ext   //更改后的名字
    fs.renameSync(oldFile,newFile)

    res.end() 
}) 

影響:変更

ここに画像の説明を挿入
変更後:
ここに画像の説明を挿入

オペレーティングシステムのディスクパス

コード

ウィンドウズ: c:\\user\\admin\\a.jpg

マック: ~/desktop/1901

UIレンダリング

ウィンドウズ:c:\user\admin
マック:~/desktop/1901

API

ディスクパス分析解析

path.parse('c:\\wamp\\xx.png') // string -> object

//返回
{
   root: 'c:\\', 盘符
   dir: 'c:\\wamp', 目录
   base: 'xx.png',  文件名
   ext: '.png', 扩展名
   name: 'xx' 	文件,不含扩展名
}

フラグメントマージ結合

path.join('磁盘路径1','磁盘路径2''磁盘路径n')

__dirnameマジック変数は、現在のファイルが配置されているディスクパスを返します

フラグメントマージの解決

path.resolve('磁盘路径1','磁盘路径n')

ディスクフラグメントをマージし、ルートを右から左に検索し、左から右にスプライスします。ルートが見つかりません。現在のファイルパスをルートとして使用します

マルターミドルウェア

プラグインのインストール
npm i express multer -S

エンコードされたデータを受信multerフォームデータ、音符先端にすべての要件を運ぶときに、例えば:<input type=file enctype="multipart/form-data" name="fieldname"

使用する

//1 引入
let multer  = require('multer');
//2 实例化  
let objMulter = multer({ dest: './upload' }); //dest: 指定 保存位置(存到服务器)
//安装中间件, 
app.use(objMulter.any());  //允许上传什么类型文件,any 代表任何类型 

ミドルウェアはreqリクエストボディを拡張します req.files

app.get('/reg',(req,res)=>{
  req.files
})

バックエンドレンダリング

通常、バックエンドから返されたjsonデータに基づいてHTMLを生成することをフロントエンドレンダリングと呼びます。バックエンドレンダリングは、フロントエンドの種類に関係なく、jsonとhtmlを組み合わせてブラウザーに返すバックエンドレンダリングです。

アイデア

  • ユーザー->アドレスバー(http [s]リクエスト)-> Webサーバー(受信)-> nodejsプロセスリクエスト(静的および動的に返す)->リクエストデータベースサービス(結果を返す)-> nodejs(受信)->ノードレンダリングページ->ブラウザ(ページを受け取り、最終的なレンダリングを完了します)

テンプレートエンジン

誰が前後にページをレンダリングするかに関係なく、テンプレートエンジンが使用されます。フロントエンドレンダリングページは実際にはdomを操作しており、バックエンドレンダリングページはデータとHTML文字をつなぎ合わせてブラウザーにスローするためのものです。

エンジン フロントエンド バックエンド
angularJs ×
Vue / Mustach
反応する
angularTs / mustach
ヒスイ/パグ ×
ejs ×
jquery +アートテンプレート ×
handlerbars ×

ヒスイ

原則:fsはフロントエンドの静的ページ+ jade + data->を返し、send(data)-> browserを返します

機能:煩わしい、強い依存

使用する

let jade = require('jade')
let html = jade.renderFile('jade模板文件'{数据}{pretty:true});	//返回字符

jadeテンプレートファイルの構文

父と息子はインデントされている必要があります
属性:ラベル(キー=値、キー2 =値)
コンテンツ:ラベルコンテンツの
使用は次のように示されます
ここに画像の説明を挿入
その他の拡張機能

ejs

原則:fsはフロントエンドの静的ページ+ ejs +データ->送信(データ)->ブラウザーを取得します

特徴:非侵襲的、穏やか、弱く依存

使用する

let ejs = require('ejs')
ejs.renderFile('ejs模板文件',{要合并到html数据},回调(err,data))

err:エラー、nullはエラーなしを意味します

データ:レンダリングされた文字|ストリーム

ejsテンプレート:ejsという名前のサフィックスが付いたhtmlファイル

ejsテンプレートファイルの構文

  • ejs構造はhtmlです
  • 出力:<%=データ名|属性名|変数名+式%>
    ここに画像の説明を挿入
  • ステートメント:<%ステートメント%>は<%%>でラップする必要があります
    ここに画像の説明を挿入
  • エスケープされていない出力:<%-データ名|変数名+式%>
    ここに画像の説明を挿入
    ここに画像の説明を挿入
  • 公開ロード:<%-include( './ hd.ejs'、{data})%>
    ここに画像の説明を挿入
    ここに画像の説明を挿入

次のようにejqデモコードは次のとおりです。
ここに画像の説明を挿入
他の拡張機能

元の記事を31件公開 ように4 訪問者1011

おすすめ

転載: blog.csdn.net/qq_43942185/article/details/104827324