我已经将我的代码简化为我可以做的最简单的express-js应用程序:

var express = require("express"),
    app = express.createServer();
app.use(express.static(__dirname + '/styles'));
app.listen(3001);

我的目录是这样的:

static_file.js
/styles
  default.css

然而,当我访问http://localhost:3001/styles/default.css时,我得到以下错误:

Cannot GET / styles /
default.css

我使用express 2.3.3和节点0.4.7。我做错了什么?


当前回答

试一试”。而不是__dirname + '/public'。 类似地,尝试process.cwd() + '/public'。

有时我们会丢失正在使用的目录,最好避免假设文件位于我们指定的位置。

类似地,避免假设在依赖关系的深度中,路径在每个级别上都以相同的方式解释。

其他回答

app.use(express.static(__dirname+'/'));

这为我工作,我尝试使用公共目录,但它不工作。 但在这种情况下,我们提供了访问目录中的整个静态文件,希望对您有所帮助!

在你的nodejs文件中

const express = require('express');
const app = express();

app.use('/static', express.static('path_to_static_folder'));

你的哈巴狗档案里

...
script(type="text/javascript", src="static/your_javascript_filename")
...

注意“静态”这个词。nodejs文件和pug文件必须相同。

提供__dirname的问题是__dirname返回当前文件的路径,而不是项目的文件。 此外,如果使用动态头文件,每个页面将在不同的路径中查找静态文件,这将不起作用。 对我来说,最好的方法是用__dirname代替process.cwd(),它总是将路径捐赠给项目文件。

app.use(express.static(process.cwd() + '/public'));

在你的项目中:

link rel="stylesheet" href="/styles/default.css"

参见:process.cwd()与__dirname之间的区别是什么?

我找到我的css文件,并添加一个路由到它:

app.get('/css/MyCSS.css', function(req, res){
  res.sendFile(__dirname + '/public/css/MyCSS.css');
});

那么它似乎起作用了。

对我有用的是:

而不是写app.use(express。Static (__dirname + 'public/images'));在你的app.js中

简单的写 app.use (express.static('公共/图像'));

即删除路径中的根目录名。然后你可以在其他js文件中有效地使用静态路径,例如:

<img src="/images/misc/background.jpg">

希望这对你有所帮助。