TDD(4) multer
投稿をアップロードする場合、フォームデータの画像ファイルをbody-parserに分けることはできませんのでmulterを使用する必要があります.s 3にアップロードされたbucketではなく、multer、multer-s 3、aws-sdkを使用してサーバ上の特定のフォルダ(ex.uploads)を生成し、格納することを実現しました.
まず、multerのstorageとlimitsは次のように設定されます.この場合、accessKeyやsecretAccessKeyなどは自分のAWSアカウントから
テストコードを作成する際、フォームデータとボディの転送を長い間うろうろしていました.この間、
テスト画像ファイルを転送するためにtestImgフォルダを作成し、任意の画像ファイルを追加し、2番目のパラメータを使用してファイルのパスを作成します.
ctrl.createPostでは、bucketの経路は
Multier設定でファイルサイズを設定し、ファイルサイズが超えた画像をアップロードするときにエラーハンドルミドルウェアを使用してエラーを処理できます.expressドキュメントによると、multerにエラーが発生した場合、multerはexpressを使用してエラーを渡します.従って、multer errorは
私はインデックスjsで記述されたエラー処理ミドルウェアでは、
Multier設定
まず、multerのstorageとlimitsは次のように設定されます.この場合、accessKeyやsecretAccessKeyなどは自分のAWSアカウントから
액세스 키(액세스 키 ID 및 비밀 액세스 키)
を取得する必要があり、aws-cliをインストールした後、awsconfigureはアクセスキーと秘密アクセスキーを格納する必要がある.//config/multer.js
const multer = require("multer");
const multerS3 = require("multer-s3");
const aws = require("aws-sdk");
require("dotenv").config();
const s3 = new aws.S3({
accessKeyId: process.env.S3_ACCESSKEYID,
secretAccessKey: process.env.S3_SECRETKEY,
region: process.env.S3_REGION,
});
const upload = multer({
storage: multerS3({
s3: s3,
bucket:
process.env.NODE_ENV !== "test"
? process.env.S3_BUCKETNAME
: process.env.S3_TESTBUCKETNAME,
acl: "public-read",
key: function (req, file, cb) {
cb(
null,
Math.floor(Math.random() * 1000).toString() +
Date.now() +
"." +
file.originalname.split(".").pop()
);
},
}),
limits: {
fileSize: 5 * 1024 * 1024,
},
});
module.exports = upload;
supertestに投稿apiをアップロードして要求を送信すると、multerパケットのストレージパスとbodyがctrされます.createPostのreqに伝わります.//api/post/index.js
router.post("/", upload.single("image"), ctrl.createPost);
テストコード
attach
テストコードを作成する際、フォームデータとボディの転送を長い間うろうろしていました.この間、
request(app).post("/users").send(전송할 데이터).end(done)
のようにsend
にデータを送信し、フォームデータを送信する際にattach
を使用する.複数のファイルを転送する場合.attachをつなげて記入すればいいです.attachは、最初のパラメータを使用してinputのnameで設定された値を作成し、2番目のパラメータを使用してファイルのパスを作成します.テスト画像ファイルを転送するためにtestImgフォルダを作成し、任意の画像ファイルを追加し、2番目のパラメータを使用してファイルのパスを作成します.
field
ctrl.createPostでは、bucketの経路は
req.file.location
に、bodyはreq.body.content
に伝達される.ただし、テストコードを作成する場合、attachとsendを使用して2つのコードを同時に書き込むことができないエラーが発生します.そのため、このときデータは現場に転送される.limits error handling
Multier設定でファイルサイズを設定し、ファイルサイズが超えた画像をアップロードするときにエラーハンドルミドルウェアを使用してエラーを処理できます.expressドキュメントによると、multerにエラーが発生した場合、multerはexpressを使用してエラーを渡します.従って、multer errorは
if(err instance of multer.MulterError)
で処理することができる.私はインデックスjsで記述されたエラー処理ミドルウェアでは、
if(err.name === 'MulterError')
として処理される.Reference
この問題について(TDD(4) multer), 我々は、より多くの情報をここで見つけました https://velog.io/@kaitlin_k/TDD4-multerテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol