运行 来自不同目录的节点应用程序使静态文件夹变得有趣

Running node app from a different directory makes static folder act funny

这是我的项目结构的要点:

这是我的超级简单app.js:

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

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


app.listen(3000, function(){
    console.log('live at http://localhost:3000');
});

现在,当我在根目录时,运行 node server.app.js 并加载 url http://localhost:3000/public/css/main.css 一切按预期完美加载。

但是,当我在 server/ 目录中时,运行 node app.js,并加载相同的 url,我得到错误 Cannot GET /public/css/main.css.

有没有办法解决这个问题,以便我可以从任何目录 运行 我的项目?

替换为:

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

有了这个:

var path = require('path');

app.use('/public', express.static(path.join(__dirname, '../public')));

第一个片段的问题在于 'public' 被解释为相对于当前工作目录。对于第二个片段,它是相对于 app.js 的位置的——它不依赖于您当前的工作目录。