Node / Express не может ПОЛУЧИТЬ ни один из моих файлов html / js / css

#javascript #node.js #express

#javascript #node.js #экспресс

Вопрос:

У меня есть приложение Node / Express. Также существует клиентское приложение с несколькими файлами html и несколькими файлами js. Я использую WebStorm и нажимаю «ВЫПОЛНИТЬ». Это выводится на консоль:

 "C:Program Files (x86)JetBrainsWebStorm 2016.2.2binrunnerw.exe" "C:Program Filesnodejsnode.exe" "C:UsersnameDownloadsFall 2016Webthingsrcserverindex.js"
Shuffle router is loaded
I am open
Example app listening on 8080
  

Итак, экспресс-часть работает.

Однако, когда я перехожу к « http://localhost:8080/game.html «, я получаю Cannot GET /game.html . Это происходит и для всех страниц css. Я могу открыть HTML-страницы с помощью кнопки предварительного просмотра (?) в Webstorm, но это открывает « http://localhost:63342/ «.

Моя структура папок такова:

 public 
  css
     style.css
  img
     card1.jpg
  js
     game.js
  game.html
src
  server
     routes
       shuffleRoutes.js
     index.js
  

Мой index.js начинается с этого фрагмента кода перед определением некоторых функций:

 let express         = require('express'),
    bodyParser      = require('body-parser'),
    logger          = require('morgan'),
    _               = require('lodash');
let path = require('path');

    //redis, session
let app = express();
app.use(logger('combined'));
app.use(express.static('public'));
app.use(bodyParser.json({}));
app.use(bodyParser.urlencoded({ extended: true }));

app.use('/img',express.static(path.join(__dirname, 'public/img')));
app.use('/js',express.static(path.join(__dirname, 'public/js')));
app.use('/css',express.static(path.join(__dirname, 'public/css')));

app.get("/v1/game", require("./routes/shuffleRoute.js"));

console.log("I am open");
  

и имеет это в конце файла

   let server = app.listen(8080, function () {
    console.log('Example app listening on '   server.address().port);
});
  

Мой game.js не имеет никакого отношения к index.js досье.
Мой game.html файл имеет только <script src="./js/game.js"></script> .

Как мне исправить ошибку, из-за которой я ничего не получаю при запуске проекта Webstorm и переходе к localhost:8080/game.html ?

Комментарии:

1. Кажется странным, попробуйте добавить путь монтирования и посмотреть, решает ли это что-нибудь? -> app.use('/', express.static(__dirname '/public'));

2. Не работает: я распечатываю это в терминале Webstorm: Example app listening on 8080 ::1 - - [10/Oct/2016:19:04:34 0000] "GET /public/game.html HTTP/1.1" 404 29 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36" ::1 - - [10/Oct/2016:19:04:38 0000] "GET /public/game.html HTTP/1.1" 404 29 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36" ::1 - - [10/Oct/2016:19:04:41 0000] "GET / HTTP/1.1" 404 13 "-" ....

3. Ну, тогда попробуйте что-нибудь еще app.use(express.static('/public')); , например, вы пробовали

4. Я пробовал это, но, похоже, это тоже не работает.

Ответ №1:

Вам необходимо определить конечную точку для использования express,

Поэтому вам нужно обслуживать game.html к этому маршруту:

Поскольку вы визуализируете html, вам нужно будет использовать ejs.

Поэтому добавление

  //configuration  
    app.engine('html', require('ejs').renderFile);
    app.set('view engine', 'ejs');

//route
    app.get('/game',function(req,res,next){
     res.render('game.html');
    });
  

Теперь перейдите к localhost:8080/game

Это должно показать ваш game.html

Комментарии:

1. к каким файлам они относятся?

2. В вашем index.js Конфигурация должна быть после let app = express(); маршрута до app.get("/v1/game", require("./routes/shuffleRoute.js"));

3. Поэтому я получаю эту ошибку, когда захожу туда Error: Failed to lookup view "game.html" in views directory "c:UsersusernameDownloadsFall 2016Webprojectfoldersrcserverviews"

4. Я думаю, что у меня есть альтернатива моему ответу, измените app.use(express.static('public')); , чтобы app.use(express.static(__dirname '/public')); удалить код, который я сказал вам добавить ранее

5. да, это не работает для меня. Я получаю cannot GET localhost:8000/game или localhost:8000/game.html .