小智 141
您还可以通过指定其他(第一个)参数来设置将静态文件提供给Web的路径use():
app.use("/public", express.static(__dirname + "/public"));
app.use("/public2", express.static(__dirname + "/public2"));
Run Code Online (Sandbox Code Playgroud)
这样,您可以在Web上获得镜像本地目录的两个不同目录,而不是在两个本地目录之间进行故障转移的一个URL路径.
换句话说,URL模式:
http://your.server.com/public/*
Run Code Online (Sandbox Code Playgroud)
从以下位置提供本地目录中的文件public:
http://your.server.com/public2/*
Run Code Online (Sandbox Code Playgroud)
提供本地目录中的文件public2.
顺便说一句,如果您不希望静态服务器从服务器的根目录提供文件,而是从更合格的路径提供服务,这也很有用.
HTH
Ran*_*pho 51
您还可以将目录"合并"到一个可见目录中
目录结构
/static/alternate_static码
app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));
Run Code Online (Sandbox Code Playgroud)
static和alternate_static都将被视为位于同一目录中.但请注意文件名clobbers.
Phi*_*lev 40
一次中间件注入是不可能的,但您可以static多次注入中间件:
app.configure('development', function(){
app.use(express.static(__dirname + '/public1'));
app.use(express.static(__dirname + '/public2'));
});
Run Code Online (Sandbox Code Playgroud)
说明
看看connect/lib/middleware/static.js#143:
path = normalize(join(root, path));
Run Code Online (Sandbox Code Playgroud)
存在options.root静态根,您在其中定义express.static或connect.static调用,并且path是请求路径.
查看connect/lib/middleware/static.js#154:
fs.stat(path, function(err, stat){
// ignore ENOENT
if (err) {
if (fn) return fn(err);
return ('ENOENT' == err.code || 'ENAMETOOLONG' == err.code)
? next()
: next(err);
Run Code Online (Sandbox Code Playgroud)
路径只检查一次,如果找不到文件请求传递给下一个中间件.
Connect 2.x的更新
代码链接对于Connect 2.x来说是实际的,但是多个静态中间件的使用仍然像以前一样可用.
小智 5
我也遇到了同样的问题,但经过长时间的搜索这个任务后,我设法解决了它。
步骤1:
在 /public 和 /mnt 路径名中提供静态文件
app.use('/public', express.static(path.join(__dirname, '<path_to_the_folder_you_want_to_serve_public>')));
app.use('/mnt', express.static(path.join(__dirname, '<path_to_the_folder_you_want_to_serve_mnt>')));
Run Code Online (Sandbox Code Playgroud)
第2步:
我的计划是在单个 NodeJS 服务器中部署两个 Angular 客户端应用程序。
所以我在两个 Angular 客户端应用程序上运行了“ng build”。
我将一个 dist 文件夹放在“/public”文件夹中,将另一个 dist 文件夹放在“/mnt”文件夹中。
步骤3:
需要修改index.html,通过更改以下内容来显示公用文件夹内容,
<script src="./public/runtime.js" defer></script>
<script src="./public/polyfills.js" defer></script>
<script src="./public/styles.js" defer></script>
<script src="./public/vendor.js" defer></script>
<script src="./public/main.js" defer></script>
Run Code Online (Sandbox Code Playgroud)
需要修改index.html,通过更改以下内容来显示mnt文件夹内容,
<script src="./mnt/runtime.js" defer></script>
<script src="./mnt/polyfills.js" defer></script>
<script src="./mnt/styles.js" defer></script>
<script src="./mnt/vendor.js" defer></script>
<script src="./mnt/main.js" defer></script>
Run Code Online (Sandbox Code Playgroud)
重要提示:根据静态文件夹服务路径更改 .js 文件路径。
步骤4:
在一条路径中,您可以为公众服务,在另一条路径中,您可以为 mnt 服务。
app.get('/', function(req, res) => {
res.sendFile(path.join(__dirname, '../public/dist/index.html'));
})
app.get('/', function(req, res) => {
res.sendFile(path.join(__dirname, '../mnt/dist/index.html'));
})
Run Code Online (Sandbox Code Playgroud)
现在你可以走了。运行并测试它。