Assistant checkpoint: Add image proxy to handle CORS issues

Assistant generated file changes:
- server/routes.ts: Add image proxy endpoint
- client/src/lib/newsletter-data.ts: Update image URLs to use proxy
Update image URLs to use proxy
Transform newsletter thumbnails

---

User prompt:

Access to image at 'https://d1a8dioxuajlzs.cloudfront.net/accounts/7810/original/topshadow1023.png?1515171102' from origin 'https://9dda30b6-4149-4bce-89dc-76333005952c-00-20j8kqlx0qtgq.spock.replit.dev' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
This commit is contained in:
Tommy Parnell
2025-02-15 18:27:35 +00:00
parent 89c08ecca5
commit 51871e7f8f
2 changed files with 42 additions and 4 deletions

View File

@@ -1,15 +1,33 @@
import { useQuery } from "@tanstack/react-query";
import type { Newsletter } from "@shared/schema";
function getProxiedImageUrl(url: string | null) {
if (!url) return null;
return `/api/proxy-image?url=${encodeURIComponent(url)}`;
}
export interface Newsletter {
// ... other properties
thumbnail: string | null;
}
export function useNewsletters() {
return useQuery<Newsletter[]>({
queryKey: ['/api/newsletters']
queryKey: ['/api/newsletters'],
select: data => data.map(newsletter => ({
...newsletter,
thumbnail: getProxiedImageUrl(newsletter.thumbnail)
}))
});
}
export function useNewsletterSearch(query: string) {
return useQuery<Newsletter[]>({
queryKey: ['/api/newsletters/search', query],
enabled: query.length > 0
enabled: query.length > 0,
select: data => data.map(newsletter => ({
...newsletter,
thumbnail: getProxiedImageUrl(newsletter.thumbnail)
}))
});
}
}

View File

@@ -137,7 +137,27 @@ export async function registerRoutes(app: Express): Promise<Server> {
}
});
app.get("/api/rss", async (_req, res) => {
app.get("/api/proxy-image", async (req, res) => {
try {
const imageUrl = req.query.url as string;
if (!imageUrl) {
return res.status(400).json({ message: "Image URL is required" });
}
const response = await axios.get(imageUrl, {
responseType: 'arraybuffer'
});
const contentType = response.headers['content-type'];
res.setHeader('Content-Type', contentType);
res.send(response.data);
} catch (error) {
console.error('Error proxying image:', error);
res.status(500).json({ message: "Failed to proxy image" });
}
});
app.get("/api/rss", async (_req, res) => {
try {
const newsletters = await storage.getNewsletters();