问题描述
我正在尝试制作一个express.js / react.js应用,但遇到了两个我找不到答案的问题。
我建立了一个包含Express服务器的基本目录,一个名为client的子目录,该目录包含了我的react应用程序。
在许多示例中,我使用默认值时
app.get( express.static( path.join( __dirname,'client/build' ) ) );
该应用程序可以正常工作并正确加载每个文件。
但是我不希望该应用程序在服务器的根目录下运行,而是在子目录中运行。例如/app
。
所以,根据我的发现。我需要在server.js
中进行以下更改:
app.get( '/app',express.static( /*...*/ ) );
我还修改了我的react应用,以更改其链接以包含/app
。但是,添加根会破坏一切。不会加载默认的index.html
。没有其他文件被加载。
尝试请求链接到文件之一时。我得到Cannot GET /app/favicon.ico
(按示例),与请求不存在的路径时得到的消息相同。
我也没有尝试成功:
router.get( express.static( /*...*/ ) );
app.get( '/app',router );
和
app.route( '/app' ).get( express.static( /*...*/ ) );
我想念什么?
解决方法
事实证明。您将不得不使用express.use
而不是express.get
。起初,我不了解它们之间的区别,但是在将所有调用更改为.use
之后。一切正常。
工作代码:
app.use( '/app',express.static( /*...*/ ) );
以及
const approuter = express.Router();
approuter.use( express.static( /*...*/ ) );
app.use( '/app',approuter );