表达js静态相对父目录

Kyo*_*ode 30 javascript node.js express

我目前正在通过expressJs提供静态文件时遇到一些小问题.

我的目录结构如下:

  • 上市
    • CSS
    • LIB
  • SRC
    • 意见
      • 的index.html
    • server.js

在我的index.html文件中,我使用前导斜杠为我的所有资产加前缀.

我的静态设置如下: app.use(express.static(path.resolve(__dirname + '../' + 'public')));

但由于某些原因,我的静态文件没有得到服务.

我在想这是一个跨域调用或者其他什么......我目前正在使用cloud9 IDE,这可能与某种方式有关吗?

rob*_*lep 55

__dirname没有尾部斜杠,因此__dirname + '../'导致DIRNAME../(无效).

相反,使用:

__dirname + '/../public'
             ^ extra slash
Run Code Online (Sandbox Code Playgroud)


tho*_*asd 50

您应该使用path.join而不是手动连接路径组件.它使用path.normalize,它解析...处理多个或尾部斜杠,并为您的平台使用适当的文件分隔符(请参阅:path.sep).

例如,

var path = require('path');

var express = require('express');

var app = express();

app.use(express.static(path.join(__dirname, '../public')));
Run Code Online (Sandbox Code Playgroud)

  • 更新:因为在`express.js`中明确禁止任何`..`(但是完全允许提供任何绝对路径),在较新的expressjs版本中,只有这个答案才能解决问题. (3认同)