#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
.