Подтвердить что ты не робот

NodeJS w/Экспресс-ошибка: не может GET/

Это то, что у меня есть, имя файла "default.htm" фактически существует и загружается при выполнении readFile с NodeJS.

var express = require('express');
var app = express();

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

app.listen(process.env.PORT);

Ошибка (в браузере):

Cannot GET /
4b9b3361

Ответ 1

Обычно вы хотите отображать шаблоны следующим образом:

app.get('/', function(req, res){
  res.render('index.ejs');
});

Однако вы также можете предоставить статический контент - для этого используйте:

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

Теперь все в каталоге /public вашего проекта будет доставлено как статическое содержимое в корень вашего сайта, например. если вы поместите default.htm в общую папку, если будете доступны, посетив /default.htm

Посмотрите express API и Подключить статическое промежуточное ПО docs для получения дополнительной информации.

Ответ 2

Вам нужно определить корневой маршрут.

app.get('/', function(req, res) {
  // do something here.
});

Ох, и вы не можете указать файл в express.static. Это должен быть каталог. app.get('/'.... будет отвечать за рендеринг этого файла. Вы можете использовать метод экспресс-рендеринга, но вам нужно будет добавить некоторые параметры конфигурации, которые расскажут, где ваши представления, традиционно в папке app/views/.

Ответ 3

У меня была такая же проблема, так вот, что я придумал. Вот как выглядела моя структура папок при запуске node server.js

app/
  index.html
  server.js

После печати пути __dirname я понял, что путь __dirname был там, где выполнялся мой сервер (app/).

Итак, ответ на ваш вопрос таков:

Если ваш файл server.js находится в той же папке, что и файлы, которые вы пытаетесь отобразить,

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

должен быть

app.use(express.static(__dirname));

Единственный раз, когда вы захотите использовать исходный синтаксис, который у вас был, будет, если у вас есть дерево папок, например:

app/
  index.html
server.js

где index.html находится в каталоге app/, тогда как server.js находится в корневом каталоге (то есть на том же уровне, что и каталог app/).

В целом, ваш код может выглядеть следующим образом:

var express = require('express');

var app = express();

app.use(express.static(__dirname));

app.listen(process.env.PORT);

Ответ 4

Я оказался на этой странице, так как я также получал сообщение Cannot GET/. Мои обстоятельства отличались, так как я использовал express.static() для нацеливания на папку, как было предложено в предыдущих ответах, а не на файл, как OP.

После того, как я express.static() документах Express, я обнаружил, что express.static() определяет свой индексный файл как index.html, тогда как мой файл назывался index.htm.

Чтобы связать это с вопросом OP, есть два варианта:

1: используйте код, предложенный в других ответах

app.use(express.static(__dirname));

а затем переименуйте файл default.htm в index.html

или же

2: добавить свойство index при вызове express.static() чтобы направить его в нужный файл индекса:

app.use(express.static(__dirname, { index: 'default.htm' }));

Ответ 5

Где ваш метод get для "/"?

Также вы не можете использовать статический html непосредственно в Express.First вам нужно настроить его.

app.configure(function(){
  app.set('port', process.env.PORT || 3000);  
  app.set("view options", {layout: false});  //This one does the trick for rendering static html
  app.engine('html', require('ejs').renderFile); 
  app.use(app.router);

});

Теперь добавьте метод get.

app.get('/', function(req, res) {
  res.render('default.htm');
});

Ответ 7

var path = require('path');

Измените app.use(express.static(__dirname + '/default.htm')); на app.use(express.static(path.join(__dirname + '/default.htm')));.

Кроме того, убедитесь, что вы указали его на правильный путь по умолчанию. html.

Ответ 8

Я столкнулся с той же проблемой, что и в вопросе. Следующие шаги решили мою проблему.

Я обновил ссылку узла nodejs со следующими шагами

  • Очистить кеш-память NPM:

    npm cache clean -f
    
  • Установите небольшой помощник под названием 'n'

    npm install -g n  
    

Затем я перешел на веб-сайт node.js, загрузил последний пакет node js, установил его, и моя проблема была решена.

Ответ 9

В моем случае статический контент уже обслуживался:

app.use('/*', express.static(path.join(__dirname, '../pub/index.html')));

... и все в приложении, похоже, каким-то образом полагается на это. (path dep обязателен require('path'))

Итак, а) да, это может быть файл; и б) вы можете сделать редирект !

app.get('/', function (req, res) { res.redirect('/index.html') });

Теперь любой, кто /index.html / получает /index.html который статически обслуживается из ../pub/index.html.

Надеюсь, это поможет кому-то еще.

Ответ 10

Вам нужно перезапустить процесс, если app.get не работает. Нажмите ctl+c а затем restart приложение узла.

Ответ 11

Я заметил, что забыл "косую черту" в начале маршрута, как показано ниже, и получал ту же ошибку:

Неправильно:

app.get('api/courses',  (req, res) => { ... }
)

Правильный:

  app.get('/api/courses',  (req, res) => { ... }
    )