Как экспортировать экземпляр grid-fs в роутеры Мангуста

Я пытаюсь экспортировать экземпляр grid-fs, созданный в файле server.js, в маршруты в каталоге api. Код работает, если я помещаю все маршруты в файл server.js, но не работает, если я перемещаю код в другую папку.

Я попытался экспортировать экземпляр gfs из server.js и требует его в logs.js, который находится в папке api, но gfs кажется пустым объектом в файле logs.js.

//Server.js file 

const express = require("express");
const bodyParser = require("body-parser");
const path = require("path");
const fs = require("fs");
const unzipper = require("unzipper");
const streamZip = require("node-stream-zip");
// file upload
const GridFsStorage = require("multer-gridfs-storage");

const Grid = require("gridfs-stream");
const multer = require("multer");

//import routes
const logs = require("./routes/api/logs");

const mongoURI = require("./config/keys/keys").mongoURI;

const storage = new GridFsStorage({
  url: "MY_URL",
  file: (req, file) => {
    console.log(file);
    return new Promise((resolve, reject) => {
      const filename = `${new Date()
        .toJSON()
        .slice(0, 10)
        .split("-")
        .reverse()
        .join(".")} - ${file.originalname}`;
      const fileInfo = {
        filename,
        bucketName: "uploads"
      };
      resolve(fileInfo);
    });
  }
});

const upload = multer({
  storage,
  fileFilter: function(req, file, cb) {
    var filetypes = /zip/;
    // var filetypes = /json|csv/;
    // var mimetype = filetypes.test(file.mimetype);
    var extname = filetypes.test(path.extname(file.originalname).toLowerCase());

    if (extname) {
      return cb(null, true);
    }
    cb({
      fileTypeError:
        "File upload only supports the following filetypes - " + filetypes
    });
  }
}).single("file");

const mongoose = require("mongoose");
const cors = require("cors");

// create mongo connection
const conn = mongoose.createConnection(mongoURI);
conn.on("error", err => {
  if (err) {
    console.log(err);
  }
});

const app = express();

// Init gfs
let gfs;

conn.once("open", () => {
  console.log("connection open");
  gfs = Grid(conn.db, mongoose.mongo);
  gfs.collection("uploads");
});

app.use(bodyParser.json({ limit: "50mb" }));
app.use(
  bodyParser.urlencoded({
    extended: true,
    limit: "50mb",
    parameterLimit: 1000000
  })
);
app.use(cors());

//use routes
//todo: WE WANT TO ACCESS gfs instance in this route
app.use("/", logs);

const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server running on port ${port}`));

//I HAVE TRIED EXPORTING IT THIS WAY
module.exports = gfs;








//in logs.js file

const express = require("express");
const Router = express.Router();
const gfs = require("../../server");

// @route GET api/logs/files
// @desc  Display all files in JSON
Router.get("/api/logs/files", (req, res) => {
  //send back error if db is not connected
  if (!gfs) {
    return res.status(503).json({ error: "No internet connection" });
  }

  gfs.files
    .find()
    .sort({ uploadDate: -1 })
    .toArray((err, files) => {
      if (!files || (Array.isArray(files) && files.length === 0)) {
        return res.status(404).json({
          error: `Files not found`
        });
      }
      if (err) {
        return res.status(503).json({ error: "Error while loading files " });
      }
      return res.json(files);
    });
});


module.exports = Router;


//ERROR: Cannot read find of undefined.
// gfs is emprt object in logs.js file

0 ответов

Другие вопросы по тегам