我很困惑为什么我的最新 Web 应用程序无法获取我所包含的任何 css 或 js 文件。在我的本地机器上,这些文件可以正常传输,但是当我将其托管在我的 nginx 服务器上时,我会收到 404 错误。以下是我的 html 引用:
<!-- ANGULAR -->
<script src="/bower_components/angular/angular.js"></script>
<!-- ANGULAR BOOTSTRAP UI -->
<script src="/bower_components/angular-bootstrap/ui-bootstrap.js"></script>
<!-- ANGULAR ROUTE-->
<script src="/bower_components/angular-route/angular-route.js"></script>
<!-- Bootstrap CSS -->
<link rel="stylesheet" type="text/css" href="./bower_components/bootstrap-css-only/css/bootstrap.css">
<!-- ANGULAR APP SETUP -->
<script src="/js/app.js"></script>
<script src="/js/controllers.js"></script>
<!-- Custom styles -->
<link rel="stylesheet" type="text/css" href="/css/styles.css">
以下是Node.js Express服务器端代码
// set up ========================
var express = require('express');
var app = express(); // create our app w/ express
var morgan = require('morgan'); // log requests to the console (express4)
var bodyParser = require('body-parser'); // pull information from HTML POST (express4)
var methodOverride = require('method-override'); // simulate DELETE and PUT (express4)
var path = require('path');
// configuration =================
// set the static files location /public/img will be /img for users
app.use(express.static(path.join(__dirname, '/public')));
console.log("DIRECTORY= "+path.join(__dirname, '/public'));
app.use(morgan('dev')); // log every request to the console
app.use(bodyParser.urlencoded({'extended':'true'})); // parse application/x-www-form-urlencoded
app.use(bodyParser.json()); // parse application/json
// application -------------------------------------------------------------
app.get('/', function(req, res) {
res.sendFile(path.join(__dirname, '/public/index.html')); // load the single view file (angular will handle the page changes on the front-end)
});
app.get('/DI_Uploader/', function(req, res) {
res.sendFile(path.join(__dirname, '/public/index.html')); // load the single view file (angular will handle the page changes on the front-end)
});
//decides between what heroku would give it or our own chosen port for a locally hosted solution
app.set('port', (process.env.PORT || 8002));
app.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
});
我将所有的js/css/bower_components放在public目录下。唯一我能想到的问题是nginx,我在这里有...
location /DI_Uploader/ {
proxy_ignore_client_abort on;
proxy_pass http://webserverName:8002;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
唯一与托管版本和本地版本不同的是,要访问托管版本,我将转到http://website.com/DI_Uploader/而不是根目录 website.com。由于我对express仍然相当陌生,所以任何指导都有帮助。
编辑:删除了html包含项前面的句号。
不知道如何在评论中添加此信息,但以下是Web服务器上的文件夹结构。
- DI_Uploader
- node_modules
- public
- bower_components
- css
- js
index.html
server.js
package.json
express.static()
指向public
,因此磁盘层次结构中它上面的内容并不重要,对吗?当客户端请求/js/app.js
时,该文件在硬盘驱动器上的确切位置是什么?它是public/js/app.js
吗?其中public
是path.join(__dirname, '/public')
? - jfriend00