From ce0a5e1229bed69c450061fac2bc19711448da56 Mon Sep 17 00:00:00 2001 From: Saad Jutt Date: Mon, 28 Feb 2022 04:04:30 +0500 Subject: [PATCH] fix: organized code for usage of multer --- api/src/app.ts | 15 ++++++++------ api/src/routes/setupRoutes.ts | 9 ++++++++ api/src/utils/connectDB.ts | 23 +-------------------- api/src/utils/file.ts | 2 ++ api/src/utils/index.ts | 1 + api/src/utils/setProcessVariables.ts | 31 ++++++++++++++++++++++++++++ 6 files changed, 53 insertions(+), 28 deletions(-) create mode 100644 api/src/routes/setupRoutes.ts create mode 100644 api/src/utils/setProcessVariables.ts diff --git a/api/src/app.ts b/api/src/app.ts index 5b40f7f..88e4475 100644 --- a/api/src/app.ts +++ b/api/src/app.ts @@ -4,9 +4,7 @@ import morgan from 'morgan' import dotenv from 'dotenv' import cors from 'cors' -import webRouter from './routes/web' -import apiRouter from './routes/api' -import { connectDB, getWebBuildFolderPath } from './utils' +import { connectDB, getWebBuildFolderPath, setProcessVariables } from './utils' dotenv.config() @@ -28,7 +26,12 @@ app.use(morgan('tiny')) app.use(express.static(path.join(__dirname, '../public'))) app.use(express.static(getWebBuildFolderPath())) -app.use('/', webRouter) -app.use('/SASjsApi', apiRouter) +export default setProcessVariables().then(async () => { + // loading these modules after setting up variables due to + // multer's usage of process var process.driveLoc + const { setupRoutes } = await import('./routes/setupRoutes') + setupRoutes(app) -export default connectDB().then(() => app) + await connectDB() + return app +}) diff --git a/api/src/routes/setupRoutes.ts b/api/src/routes/setupRoutes.ts new file mode 100644 index 0000000..02a6b61 --- /dev/null +++ b/api/src/routes/setupRoutes.ts @@ -0,0 +1,9 @@ +import { Express } from 'express' + +import webRouter from './web' +import apiRouter from './api' + +export const setupRoutes = (app: Express) => { + app.use('/', webRouter) + app.use('/SASjsApi', apiRouter) +} diff --git a/api/src/utils/connectDB.ts b/api/src/utils/connectDB.ts index 88284c5..92b2673 100644 --- a/api/src/utils/connectDB.ts +++ b/api/src/utils/connectDB.ts @@ -1,40 +1,19 @@ -import path from 'path' import mongoose from 'mongoose' -import { configuration } from '../../package.json' -import { getDesktopFields } from '.' import { populateClients } from '../routes/api/auth' -import { getRealPath } from '@sasjs/utils' export const connectDB = async () => { // NOTE: when exporting app.js as agent for supertest // we should exclude connecting to the real database if (process.env.NODE_ENV === 'test') { - process.driveLoc = path.join(process.cwd(), 'tmp') return } else { const { MODE } = process.env if (MODE?.trim() !== 'server') { console.log('Running in Destop Mode, no DB to connect.') - - const { sasLoc, driveLoc } = await getDesktopFields() - - process.sasLoc = sasLoc - process.driveLoc = driveLoc - } else { - const { SAS_PATH, DRIVE_PATH } = process.env - - process.sasLoc = SAS_PATH ?? configuration.sasPath - process.driveLoc = getRealPath( - path.join(process.cwd(), DRIVE_PATH ?? 'tmp') - ) + return } - console.log('sasLoc: ', process.sasLoc) - console.log('sasDrive: ', process.driveLoc) - - if (MODE?.trim() !== 'server') return - mongoose.connect(process.env.DB_CONNECT as string, async (err) => { if (err) throw err diff --git a/api/src/utils/file.ts b/api/src/utils/file.ts index c48c633..5072bb9 100644 --- a/api/src/utils/file.ts +++ b/api/src/utils/file.ts @@ -13,6 +13,8 @@ export const getWebBuildFolderPath = () => export const getTmpFolderPath = () => process.driveLoc +export const getTmpUploadsPath = () => path.join(getTmpFolderPath(), 'uploads') + export const getTmpFilesFolderPath = () => path.join(getTmpFolderPath(), 'files') diff --git a/api/src/utils/index.ts b/api/src/utils/index.ts index 5b2b671..d9700a9 100644 --- a/api/src/utils/index.ts +++ b/api/src/utils/index.ts @@ -9,6 +9,7 @@ export * from './getDesktopFields' export * from './parseLogToArray' export * from './removeTokensInDB' export * from './saveTokensInDB' +export * from './setProcessVariables' export * from './sleep' export * from './upload' export * from './validation' diff --git a/api/src/utils/setProcessVariables.ts b/api/src/utils/setProcessVariables.ts new file mode 100644 index 0000000..8cb705f --- /dev/null +++ b/api/src/utils/setProcessVariables.ts @@ -0,0 +1,31 @@ +import path from 'path' +import { getRealPath } from '@sasjs/utils' + +import { configuration } from '../../package.json' +import { getDesktopFields } from '.' + +export const setProcessVariables = async () => { + if (process.env.NODE_ENV === 'test') { + process.driveLoc = path.join(process.cwd(), 'tmp') + return + } + + const { MODE } = process.env + + if (MODE?.trim() !== 'server') { + const { sasLoc, driveLoc } = await getDesktopFields() + + process.sasLoc = sasLoc + process.driveLoc = driveLoc + } else { + const { SAS_PATH, DRIVE_PATH } = process.env + + process.sasLoc = SAS_PATH ?? configuration.sasPath + process.driveLoc = getRealPath( + path.join(process.cwd(), DRIVE_PATH ?? 'tmp') + ) + } + + console.log('sasLoc: ', process.sasLoc) + console.log('sasDrive: ', process.driveLoc) +}