无法从反应应用程序访问快速服务器中的公用文件夹

Posted

技术标签:

【中文标题】无法从反应应用程序访问快速服务器中的公用文件夹【英文标题】:Not able to access public folder in express server from a react app 【发布时间】:2022-01-21 15:36:59 【问题描述】:

问题

在渲染保存在后端的图像的路径时(使用 express),我在浏览器中看到损坏的图像。 我知道有类似的问题,但无法为我解决问题。

详情

我的server.ts 文件中有这个,在http://localhost:5000 中运行:

import express from 'express';
export const app = express();
require('dotenv').config();
import cookieParser from 'cookie-parser';

import path from 'path';
const pathToFile = path.resolve(__dirname, './public');

import cors from 'cors';
const corsOptions = 
  credentials: true,
  origin: 'http://localhost:3000',


app.use(express.json());
app.use(express.urlencoded( extended: true ));
app.use(cookieParser());
app.use(express.static(pathToFile));
app.use(cors(corsOptions));

我在 http://localhost:3000 中运行的一个 react 应用程序组件中有这个:

petToRender.petPicture &&
<img
src=`http://localhost:5000/$petToRender.petPicture.replace(/\\/g, "/").replace('public/','')`
/>

我也试过没有.replace('public/',''),但它也不起作用。

更多参考和检查

petToRender.petPicture 的 mongoDB 上的数据看起来像屏幕截图所示并且被正确获取:

图片使用multer正确上传到./public/images

在浏览器的控制台上 - 我得到:

GET http://localhost:5000/images/61b3441440535e9b69a74356.jpg 404 (Not Found)

当我输入图像直接链接时,控制台还会显示以下内容:

Refused to load the image 'data:image/png;base64,iVBORw0KGgoAAAA...' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback

【问题讨论】:

由于您使用 Typescript,我假设您必须先将其转换为 javascript,并且它可能放置在另一个文件夹中,例如 ./build,对吧?如果是这样,您传递给 express.static 的路径是否正确?尝试记录 __dirname 变量以确保它指向正确的文件夹。或者试试console.log(pathToFile) 谢谢!你是对的,它将 js 版本放在 ./dist 中。 【参考方案1】:

关注@Molda 的评论 -

我改成const pathToFile = path.resolve(__dirname, '../public');(又加了一个'.'),图片加载正常!

【讨论】:

以上是关于无法从反应应用程序访问快速服务器中的公用文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Lumen:刚刚安装了lumen,无法从公用文件夹中获取资源

无法访问 Android (MTP) 中公用文件夹中存储的文件

允许用户从公用文件夹 Meteor.js 下载文件

如何从公用文件夹中访问环境变量?

通过电容访问公用文件夹中的文件

如何从资源文件夹动态加载资产到公用文件夹并使用asset()助手访问它们