onComplete doesn't work in production but works in development

I have an express app that looks something like this
import express from 'express';
import cors from 'cors'
import { uploadRouterHandler } from './routes/uploadthing.route';
const PORT = process.env.SERVER_PORT;

const app = express();

app.enable("trust proxy");

app.use(cors());
app.options('*ss', cors());


app.use("/api/uploadthing", uploadRouterHandler);

app.use(express.json());
app.use('/api', documentRoutes)

}
app.listen(PORT, () => {
console.log("server listening on port: " + PORT)
})
import express from 'express';
import cors from 'cors'
import { uploadRouterHandler } from './routes/uploadthing.route';
const PORT = process.env.SERVER_PORT;

const app = express();

app.enable("trust proxy");

app.use(cors());
app.options('*ss', cors());


app.use("/api/uploadthing", uploadRouterHandler);

app.use(express.json());
app.use('/api', documentRoutes)

}
app.listen(PORT, () => {
console.log("server listening on port: " + PORT)
})
My UT route builder looks something like this:
import { createRouteHandler, createUploadthing, type FileRouter } from 'uploadthing/express';
import { UploadThingError } from "uploadthing/server";
const f = createUploadthing();
export const uploadRouter = {
videoAndImage: f({
image: {
maxFileSize: "4MB",
maxFileCount: 4,
},
video: {
maxFileSize: "16MB",
maxFileCount: 10
},
blob: { maxFileSize: "8GB", maxFileCount: 10 },
}).middleware(async ({ req }) => {
const session = // check session
if (!session) {
throw new UploadThingError("Not authnticated");
}
req.session = session.session as Session;
req.user = session.user as User;
return { user: req.user, session: req.session }
}).onUploadComplete(async ({ file, metadata }) => {

if (!file) {
throw new UploadThingError("no files after uploading")
}
// insert document to db
}),
} satisfies FileRouter;

export const uploadRouterHandler = createRouteHandler({
router: uploadRouter,
})
import { createRouteHandler, createUploadthing, type FileRouter } from 'uploadthing/express';
import { UploadThingError } from "uploadthing/server";
const f = createUploadthing();
export const uploadRouter = {
videoAndImage: f({
image: {
maxFileSize: "4MB",
maxFileCount: 4,
},
video: {
maxFileSize: "16MB",
maxFileCount: 10
},
blob: { maxFileSize: "8GB", maxFileCount: 10 },
}).middleware(async ({ req }) => {
const session = // check session
if (!session) {
throw new UploadThingError("Not authnticated");
}
req.session = session.session as Session;
req.user = session.user as User;
return { user: req.user, session: req.session }
}).onUploadComplete(async ({ file, metadata }) => {

if (!file) {
throw new UploadThingError("no files after uploading")
}
// insert document to db
}),
} satisfies FileRouter;

export const uploadRouterHandler = createRouteHandler({
router: uploadRouter,
})
I have deployed my app to railway on "https://<somename>.up.railway.app" I can't get callbacks to work in prod for the life of me although it works in dev perfectly fine.
2 Replies
moaaz
moaazOP3mo ago
Any suggestions where I should look ? or where to check ?
Parwar Yassin
Parwar Yassin3mo ago
you mean the img is not uploading or what ?

Did you find this page helpful?