No puedo entender por qué en el archivo upload.js en el siguiente fragmento de código me arroja un error: app.get no es una función.
Tengo un archivo index.js donde configuré todo exportado mi aplicación por module.exports = app y también tengo app.set("upload") en él, pero cuando intento importar la aplicación en el archivo upload.js y usándolo, está dando un error de error: app.get no es una función.
a continuación se muestra el código de index.js
const express = require("express"); const app = express(); const multer = require("multer"); const path = require("path"); const uploadRoutes = require("./src/routes/apis/upload.js"); // multer config const storageDir = path.join(__dirname, "..", "storage"); const storageConfig = multer.diskStorage({ destination: (req, file, cb) => { cb(null, storageDir); }, filename: (req, file, cb) => { cb(null, Date.now() + path.extname(file.originalname)); }, }); const upload = multer({ storage: storageConfig }); // local upload. //set multer config app.set("root", __dirname); app.set("storageDir", storageDir); app.set("upload", upload); app.use("/api/upload", uploadRoutes); const PORT = process.env.PORT || 5002; if (process.env.NODE_ENV === "development") { app.listen(PORT, () => { console.log(`Server running in ${process.env.NODE_ENV} on port ${PORT}`); }); } else { module.exports.handler = serverless(app); } module.exports = app;archivo upload.js
const express = require("express"); const router = express.Router(); const app = require("../../../index"); const uploadDir = app.get("storageDir"); const upload = app.get("upload"); router.post( "/upload-new-file", upload.array("photos"), (req, res, next) => { const files = req.files; return res.status(200).json({ files, }); } ); module.exports = router;El problema es que tienes una dependencia circular.
La aplicación requiere carga, la carga requiere aplicación.
Intente pasar la aplicación como un parámetro y reestructure upload.js para que se vea como:
const upload = (app) => { // do things with app } module.exports = uploadLuego impórtelo en la aplicación y pase la referencia allí (evite importar la aplicación en la carga).
import upload from './path/to/upload' const app = express(); // ... upload(app)