2015-11-26 7 views
1

Я делаю проект, используя стек MEAN, и хотел бы обслуживать мои файлы с помощью экспресс. До сих пор, когда я загрузить страницу только индексный файл загружен, но и для других 2 зависимостей я получаю сообщение об ошибке, как это:, обслуживающий статический контент с помощью маршрута cachall - express

GET /assets/styles/css/application.css 404 9.470 ms - 151 
Error: ENOENT: no such file or directory, stat '/home/shooshte/Webpages/Curriculum/assets/views/index.html' 
    at Error (native) 

Я пытался служить мои файлы с express.static методом, но это похоже, не работает. Я также хочу иметь маршрут cachall, который всегда обслуживает мой файл index.html (создавая угловое приложение, поэтому угловое будет обрабатывать маршрутизацию из индекса).

Мой server.js файл:

// packages 
var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var morgan = require('morgan'); 
var path = require('path'); 

//app configuration 
    var port = process.env.PORT || 8080; 

    // body parser 
    app.use(bodyParser.urlencoded({ extended: true })); 
    app.use(bodyParser.json()); 
    //CORS requests 
    app.use(function(req, res, next) { 
     res.setHeader('Access-Control-Allow-Origin', '*'); 
     res.setHeader('Access-Control-Allow-Methods', 'GET, POST'); 
     res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, content-type, Authorization'); 
     next(); 
    }); 

    //log all requests to console 
    app.use(morgan('dev')); 

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

//catchall route 
app.get('*', function(req, res) { 
    res.sendFile(path.join(__dirname + '/assets/views/index.html')); 
}); 

//start the server 
app.listen(port); 
console.log('Running on: ' + port); 

index.html

<!doctype HTML> 
<head> 
    <meta charset="utf-8"> 
    <title>Miha Šušteršič</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="assets/styles/css/application.css"> 
</head> 
<body> 
    <script src="../../bower_components/angular/angular.min.js"></script> 
</body> 

моя структура файла выглядит следующим образом:

assets 
--scripts 
--styles 
----css 
------application.css 
----sass 
--views 
--index.html 
bower_components 
node_modules 
.gitingnore 
bower.json 
gulpfile.js 
package.json 
readme.md 
server.js 
+0

Вы обслуживаете index.html из каталога представлений в своем коде кода catchall, тогда как в вашей файловой структуре index.html находится непосредственно под каталогом ресурсов? –

ответ

0

При указании app.use(express.static(__dirname +'/assets')); в вашей экспресс-конфигурации, это означает, что экспресс-сервер будет искать статические файлы в каталоге ресурсов. Теперь в ваших .html-файлах вы должны указать статический путь к файлу без активов.

Таким образом, замена <link rel="stylesheet" href="assets/styles/css/application.css"> на <link rel="stylesheet" href="styles/css/application.css"> должна быть успешной приложением application.css.

Смежные вопросы