Я недавно завершил локальный веб-сайт Node.js, который работает нормально, хотя я заметил некоторые проблемы при загрузке веб-сайта онлайн на облачный веб-хостинг OVH. Все страницы, даже те, которые не должны существовать, возвращают содержимое домашней страницы.
Я использую Express с Node.js, а структура файла была создана с помощью express-generator . Мой app.js
файл содержит следующее:
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var expressHbs = require('express-handlebars');
var Handlebars = require('handlebars');
var HandlebarsIntl = require('handlebars-intl');
var mongoose = require('mongoose');
var indexRouter = require('./routes/index');
var blogRouter = require('./routes/blog');
var blogItemRouter = require('./routes/blog-item');
var portfolioRouter = require('./routes/portfolio');
var contactRouter = require('./routes/contact');
var iBlogPostsRouter = require('./routes/i/blog-posts');
var iContactRouter = require('./routes/i/contact');
var iPortfolioItemsRouter = require('./routes/i/portfolio-items');
var portfolioItemRouter = require('./routes/portfolio-item');
HandlebarsIntl.registerWith(Handlebars);
var app = express();
// view engine setup
app.engine('.hbs', expressHbs({defaultLayout: 'layout', extname: '.hbs'}));
app.set('view engine', '.hbs');
app.disable('etag');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/blog', blogRouter);
app.use('/blog/:title', blogItemRouter);
app.use('/portfolio', portfolioRouter);
app.use('/contact', contactRouter);
app.use('/i/blog-posts', iBlogPostsRouter);
app.use('/i/contact', iContactRouter);
app.use('/i/portfolio-items', iPortfolioItemsRouter);
app.use('/portfolio/:title', portfolioItemRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {title: err.status + ' ' + err.message});
});
module.exports = app;
Все маршрутизаторы имеют одинаковый код, за исключением визуализации другого шаблона. Вот пример indexRouter
:
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'About', about: true });
});
module.exports = router;
Проблема в том, что каждая страница, даже мои .js
и .css
файлы, возвращают HTML-код из того, что находится в app.use('/' ...)
маршрутизаторе. Консоль возвращает следующую ошибку:
Resource interpreted as Stylesheet but transferred with MIME type text/html: "https://xxx.co.uk/core/styles/m.css".
Я экспериментировал с этим, изменив домашнюю страницу своей страницей контактов, в результате чего каждый URL возвращал страницу контактов. Мои CSS и JavaScript находятся в папке public
. Единственное, о чем я могу думать, это то, что маршрут «/» каким-то образом используется для каждого отдельного запроса, но для меня нет никакого смысла, почему это может происходить.