NodeJS学習ノート:Expressの中間部品multierの使用を簡単に述べます.


前言
私は技術の専門家ではありません.このノートは言語を使って開発するレベルからいくつかの体験を記録しただけです.ソースまたはより深いレベルから言語そのものの優劣を議論したくないです.文章の内容は筆者の個人的な悟りであり、正確性を保証しないだけでなく、他人が分かると保証しない.
これはなんとこのノートの第二編です.これから第三編があるかどうかは分かりませんが.
第一篇はここです.NodeJS学習ノート:require、exportとmodule.exportsの初印象です.
誘引子
実はMEANJSのフレームワークに基づいて、NodeJSの探索を開始しました.angglarJSに対して、サーバー端のピットは本当に多すぎます.npmでは多くのモジュールが使えますが、詳細な文書がほとんどないので、本当に疲れます.MEANJSのデモでユーザーの顔写真機能を提供しました.今回の学習目的はファイルアップロード機能を独立させることです.先端のアップロード処理はアングラーfile-upladを使用します.
本文
私の目標はアップロードファイルのフォームを提供することです.データベースの端には以下のデータが保存されます.
  • ファイルID
  • ユーザID
  • URL
  • MIME-TYPE
  • ファイルサイズ
  • オリジナルファイル名
  • のタイトルは、画像という通常は画像のテーマを説明するために使用される場合、ここで必ず記入します.
  • は、画像ならこれをaltに置いたほうがいいと説明しています.
  • はい、始めます
    前端第一ピット:formData
    angglar-file-uplloaderはformDataを提供しましたが、長い間このデータを試してみましたが、私のPHPサーバーにも転送できませんでした.そうです.ここでPHPを使いました.これはよく知っています.
      :              ,       ,
                      ,
                         。
    
    解決策:その例のOnBeforeUploadItemイベントがトリガされた時に、formDataに書き込んでください.そして、元のデータをカバーするのをpushで防ぐ必要があります.
        uploader.onBeforeUploadItem = function(fileItem) {
          fileItem.formData.push({
            title: $scope.upload.title
          });
        };
    先端の細かいところ
    アップロードするファイルが選択されていないと、そのインスタンスuplloadAllは成功的に呼び出されません.
          if (uploader.queue.length) {
              uploader.uploadAll();
          } else {
              //    REST    ,   update
          }
    multierの使用
    いよいよ本文になりました.公式サポートの文書はここにあります.超簡単です.
    var multerConfig = {
        dest: './modules/uploads/client/uploads/', // Normal file upload destination path
        limits: {
            fileSize: 10*1024*1024 // Max file size in bytes (10 MB)
        },
        fileFilter: function (req, file, cb) {
            var mimetypes = (['text/*', 'image/*', 'video/*', 'audio/*', 'application/zip']).join(',');
            var testItems = file.mimetype.split('/');
            if ((new RegExp('\\b' + testItems[0] + '/\\*', 'i')).test(mimetypes) || (new RegExp('\\*/' + testItems[1] + '\\b', 'i')).test(mimetypes) || (new RegExp('\\b' + testItems[0] + '/' + testItems[1] + '\\b', 'i')).test(mimetypes)) {
                cb(null, true);
            } else {
                return cb(new Error('Only image, plain text, audio, video and zip format files are allowed!'), false);
            }
        } // fileFilter        , instance.fileFilter = funciton(){};     
    };
    var upload = multer(multerConfig).single('userUploadFiles');//single    angular-file-uploader              
    //  single  fields, array  ,           ,     ,      。
    //      ,           title description  ,req.body, req.query, req.params    ,req.file req.files undefined,    ?
    upload(req, res, function (uploadError) {
        //**     ,req.file   **(      single  ,    req.files  ),  title description     req.body 
        //  ,      ,   
        if (uploadError) {
            //    
        } else {
            //    ,               ,      。
        }
    });
    締め括りをつける
    Demoは頼りないです.文書は簡単すぎて、検索が答えられない時はやはりソースコードを見ます.だから、学生たちのソースコードは書式を維持しながら読みやすいです.