如何在不同的文件中定义多个存储?

How to define multer storage in different file?

我有一个带有 express 的节点应用程序。 服务器位于 server.js,我的路由器设置如下:

app.use('/xyz', xyz);
app.use('/abc', abc);

路由器xyz和abc在/routes的不同路由模块中。 我想使用 multer 将图像上传到 MongoDB。上传文件的端点是/xyz/upload

storage = new GridFsStorage({
    url: process.env.DB_URL,
    file: (req, file) => {
    return new Promise((resolve, reject) => {
        const filename = file.originalname;
        const fileInfo = {
            filename: filename,
            bucketName: 'uploads'
        };
        resolve(fileInfo);
    });
    }
});

如何在 xyz 路由器文件中定义此 const upload = multer({ storage });

互联网上的所有示例都显示在 server.js 和 app.post() 中定义了 multer。如果我在不同的模块中定义了路由器怎么办?

如果您正在寻找更简洁的架构,那么我建议遵循关注点分离原则 (SoC),并将文件处理中间件放在单独的文件中,如下所示:

const multer = require("multer");

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "./public/uploads");
  },
  filename: function (req, file, cb) {
    const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
    cb(
      null,
      new Date().getTime() + "-" + uniqueSuffix + "-" + file.originalname
    );
  },
});

const fileFilter = (req, file, cb) => {
  // reject all files except jpeg
  if (file.mimetype === "image/jpeg") {
    cb(null, true);
  } else {
    cb(null, false);
  }
};

module.exports = multer({
  storage: storage,
  limits: {
    fileSize: 1024 * 1024 * 15, // 15mb max size,
  },
  fileFilter: fileFilter,
});

然后,在你的路由中,如果你正在使用 CommonJS,一个简单的 require 就足够了:

const upload = require("./fileHandling");

server.post(
    `/route`,
    upload.array('Photos', 6),
    controller,
  );

它帮了我大忙,希望对你有帮助!