Все страницы возвращают одинаковый контент с OVH Cloud Hosting - PullRequest
0 голосов
/ 01 сентября 2018

Я недавно завершил локальный веб-сайт 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. Единственное, о чем я могу думать, это то, что маршрут «/» каким-то образом используется для каждого отдельного запроса, но для меня нет никакого смысла, почему это может происходить.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Причина, по которой ваш сайт по умолчанию использует маршрут '/', заключается в том, что вы не правильно настроили свои маршруты. Каждый модуль маршрутизатора должен знать, что экспортируется. Например, ваш файл indexRouter должен выглядеть следующим образом:

var express = require('express');
var router = express.Router;

router.get('/', function(req, res){
    res.render('index', { title: 'About', about: true });
});

module.exports = router;   <<----

Кроме того, если app.js, который вы показываете по состоянию на 04.09.2008 06:36, является завершенным app.js, вы много пропускаете. У вас есть свернутый CSS в качестве первой таблицы стилей, которая на самом деле содержит обработанную index.html.

0 голосов
/ 04 сентября 2018

Вместо использования app.use('/<route>', <router>) в вашем проекте, попробуйте заменить его на соответствующие выражения, например,

router.<route_method>('/<route>', function(req, res, next){
  // code
});

Посмотрите, нормально ли это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...