From 9f3eadaf8eb838b8e9e73bc16740aa0423279e0a Mon Sep 17 00:00:00 2001 From: Stevche Radevski Date: Mon, 8 Jul 2024 17:56:07 +0200 Subject: [PATCH] feat: Add static server and adjust file local to work out of the box --- packages/medusa/src/commands/develop.ts | 8 +++++++- packages/medusa/src/loaders/express.ts | 8 +++++++- packages/medusa/src/loaders/index.ts | 6 +++++- .../providers/file-local/src/services/local-file.ts | 8 +++++--- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/packages/medusa/src/commands/develop.ts b/packages/medusa/src/commands/develop.ts index 2e1b52ee72615..0f428515df4e1 100644 --- a/packages/medusa/src/commands/develop.ts +++ b/packages/medusa/src/commands/develop.ts @@ -89,7 +89,13 @@ export default async function ({ port, directory }) { this.watcher = chokidar.watch(["."], { ignoreInitial: true, cwd: process.cwd(), - ignored: [/(^|[\\/\\])\../, "node_modules", "dist", "src/admin/**/*"], + ignored: [ + /(^|[\\/\\])\../, + "node_modules", + "dist", + "static", + "src/admin/**/*", + ], }) this.watcher.on("add", (file) => { diff --git a/packages/medusa/src/loaders/express.ts b/packages/medusa/src/loaders/express.ts index d38b5ab3b3a42..56963a561f07e 100644 --- a/packages/medusa/src/loaders/express.ts +++ b/packages/medusa/src/loaders/express.ts @@ -1,19 +1,22 @@ import { ConfigModule } from "@medusajs/types" import createStore from "connect-redis" import cookieParser from "cookie-parser" -import { Express } from "express" +import express, { Express } from "express" import session from "express-session" import Redis from "ioredis" import morgan from "morgan" +import path from "path" type Options = { app: Express configModule: ConfigModule + rootDirectory: string } export default async ({ app, configModule, + rootDirectory, }: Options): Promise<{ app: Express shutdown: () => Promise @@ -67,6 +70,9 @@ export default async ({ app.use(cookieParser()) app.use(session(sessionOpts)) + // Currently we don't allow configuration of static files, but this can be revisited as needed. + app.use("/static", express.static(path.join(rootDirectory, "static"))) + app.get("/health", (req, res) => { res.status(200).send("OK") }) diff --git a/packages/medusa/src/loaders/index.ts b/packages/medusa/src/loaders/index.ts index c8a13f428b90c..50989a086558d 100644 --- a/packages/medusa/src/loaders/index.ts +++ b/packages/medusa/src/loaders/index.ts @@ -92,7 +92,11 @@ async function loadEntrypoints( return async () => {} } - const { shutdown } = await expressLoader({ app: expressApp, configModule }) + const { shutdown } = await expressLoader({ + app: expressApp, + configModule, + rootDirectory, + }) expressApp.use((req: Request, res: Response, next: NextFunction) => { req.scope = container.createScope() as MedusaContainer req.requestId = (req.headers["x-request-id"] as string) ?? v4() diff --git a/packages/modules/providers/file-local/src/services/local-file.ts b/packages/modules/providers/file-local/src/services/local-file.ts index 3976462a418b2..af45e186a7d0f 100644 --- a/packages/modules/providers/file-local/src/services/local-file.ts +++ b/packages/modules/providers/file-local/src/services/local-file.ts @@ -10,8 +10,8 @@ export class LocalFileService extends AbstractFileProviderService { constructor(_, options: LocalFileServiceOptions) { super() - this.uploadDir_ = options?.upload_dir || path.join(__dirname, "uploads") - this.backendUrl_ = options?.backend_url || "http://localhost:9000" + this.uploadDir_ = options?.upload_dir || path.join(process.cwd(), "static") + this.backendUrl_ = options?.backend_url || "http://localhost:9000/static" } async upload( @@ -83,7 +83,9 @@ export class LocalFileService extends AbstractFileProviderService { } private getUploadFileUrl = (fileKey: string) => { - return path.join(this.backendUrl_, this.getUploadFilePath(fileKey)) + const baseUrl = new URL(this.backendUrl_) + baseUrl.pathname = path.join(baseUrl.pathname, fileKey) + return baseUrl.href } private async ensureDirExists(dirPath: string) {