Can';无法从express/npm模块中找到静态资产 太长,读不下去了
我的项目是一个由ExpressJS服务器使用的NPM模块。服务器需要指定一个端点,我的模块将完成其余的工作。如何让模块加载正确的html页面并从正确的路径获取正确的js/css文件 问题 我遇到了一个问题,我可以使用库查看站点的目录结构,并且所有文件都在正确的目录中,但是由于某种原因,当我尝试加载任何文件时,无论是从Can';无法从express/npm模块中找到静态资产 太长,读不下去了,express,Express,我的项目是一个由ExpressJS服务器使用的NPM模块。服务器需要指定一个端点,我的模块将完成其余的工作。如何让模块加载正确的html页面并从正确的路径获取正确的js/css文件 问题 我遇到了一个问题,我可以使用库查看站点的目录结构,并且所有文件都在正确的目录中,但是由于某种原因,当我尝试加载任何文件时,无论是从serveIndex视图还是从它应该加载的实际端点,我只会得到404个错误 下面是一个例子,如果有人想从他们的项目中使用这个NPM模块 app.js(他们的服务器) 这是我的项目结构
serveIndex
视图还是从它应该加载的实际端点,我只会得到404个错误
下面是一个例子,如果有人想从他们的项目中使用这个NPM模块
app.js(他们的服务器)
这是我的项目结构建成后的图像
从返回/express admin area/build/src
的console.log(uuu dirname)
,我使用上面代码中实际服务器传递的express
引用,告诉我的模块使用
... import libraries etc ...
const adminAreaConfig = express => {
const adminArea = express.Router()
adminArea.use('/', express.static(__dirname + '/views') // sets my modules views to the "http://localhost:3000/admin" path
adminArea.use('/dirs', serveIndex(__dirname)) // will get into this later
... some other stuff like exports etc ...
然后尝试将index.html
文件加载到express admin area/build/src/views
目录中,但失败,因为它无法在express admin area/build/src/views/static/CSS
或中找到CSS和JS文件
首先,我知道它失败了,因为它没有寻找http://localhost:3000/admin/static/css/styles.css
它查找http://localhost:3000/static/css/styles.css
,所以这是我需要完全解决的另一个问题
其次,回顾上面的小代码示例,adminArea.use('/dirs',serveIndex(\uu dirname))
,我正在使用serveIndex
库来尝试查看目录结构。如果我转到http://localhost:3000/admin/dirs
我在浏览器中获得了正确的目录和文件
但是现在,如果我试图查看一个实际的文件,我会遇到错误无法获取/admin/dir/main.js
,例如,如果我要转到http://localhost:3000/admin/dir/main.js
,但如果需要,我可以继续深入目录,例如图像中的控制器
或路由
目录
我想要什么
我需要一种方法来加载这些静态资产。如果我用一个简单的Hello,World代码>然后这就是我得到的,但是尝试加载任何外部脚本/样式表是在我得到404错误并且没有加载任何内容时。我将回答我自己的问题
解决方案其实相当简单。具体而言,该模块的视图层由React、CRA处理。CRA将寻找一些特定的环境变量,其中一个是PUBLIC\u URL
。我所要做的就是
- 在我的CRA的根目录中创建一个
.env
文件
- 添加
PUBLIC\u URL=“/admin”
之后,它只是重建项目,warn build
,然后重置服务器。CRA随后将查看http://localhost:3000/admin/static/...
而不是http://localhost:3000/static/...
用于静态资产。在视图
文件夹外创建一个静态
文件夹。我回答了一个类似的问题。
... import libraries etc ...
const adminAreaConfig = express => {
const adminArea = express.Router()
adminArea.use('/', express.static(__dirname + '/views') // sets my modules views to the "http://localhost:3000/admin" path
adminArea.use('/dirs', serveIndex(__dirname)) // will get into this later
... some other stuff like exports etc ...