【问题标题】:Getting express.js to show a public folder让 express.js 显示一个公用文件夹
【发布时间】:2013-07-01 05:32:10
【问题描述】:

我最近使用 express.js 构建了一个快速的单页应用程序,这确实是我的第一个 js 框架(实际上,我的第一个 js 项目,所以我真的很陌生)。我订阅了新的typography.com 云字体,但无法找到放置在公用文件夹中的“字体”文件夹。有什么方法我需要添加文件夹并指定路线吗?

这是我的 app.js 文件:

/**
 * Module dependencies.
 */

var express = require('express'),
    routes = require('./routes'),
    user = require('./routes/user'),
    http = require('http'),
    path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static('public'));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

我根本没有对路线进行任何更改,所以它们只是默认的。

【问题讨论】:

  • 你能展示你的代码吗?

标签: javascript node.js express


【解决方案1】:

请使用express.static设置:

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

然后将您的 fonts 文件夹放入该 public 文件夹中。

【讨论】:

  • 我将它添加到我的 app.js 中,并替换了 app.use(express.static(path.join(__dirname, 'public'))); (我尝试了两种方法),但都无法在 public 中找到 fonts 文件夹,或者即使我把它放在 stylesheets 文件夹中。
  • 你是否直接在它监听的端口上使用任何代理或访问节点进程?
  • (对不起,我不太明白)。我所做的只是将 web: node app.js 添加到我的 Procfile 中,这样它就可以托管在 heroku 上。除此之外,我修改了默认模板和样式表,没有别的。
  • 你能分享一下你加载的 CSS @font-face 吗?能否请您分享网址以及您在哪里上传本地字体?
  • 这就是问题所在,我还不能使用@font-face。该站点是here,但它引用了typography.com 的主css 文件,在技术上它被称为“开发”模式。要将字体投入生产,我必须将它们移动到我的服务器上的一个文件夹,我不知道如何引用哈哈。
【解决方案2】:

如果你使用 Heroku,你可能想看看这个帖子:Deploy Nodejs on Heroku fails serving static files located in subfolders

这家伙解释说,在他在 package.json 中指定 NPM 的最后一个版本之前,他一直在为“__dirname”而苦苦挣扎:

"engines": {
    "node": "0.10.11",
    "npm": "1.2.25"
} 

如果这不起作用,您可以尝试:

// At the top of your web.js
process.env.PWD = process.cwd()

// Then
app.use(express.static(process.env.PWD + '/public'));

而不是“__dirname”

但是,如果您已经在本地挣扎,那么所有这些都可能毫无用处。

【讨论】:

  • 伙计,我没有声明,但遗憾的是我无法让它在本地工作。几乎到了我必须停止使用节点的地步,或者只使用 typekit 代替:/
  • 您遇到的不是节点问题。您可以将任何文件放在 /fonts/ 目录中,然后在浏览器中直接导航到该文件吗?如果这样可以正常工作,那么公共静态文件可以正常工作,并且您尝试引用它们的方式存在问题。
猜你喜欢
  • 2021-06-30
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多