Почему я получаю ошибку «Cannot GET / page» в моем приложении node.js, когда оно перезагружается / обновляется? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть приложение Nodejs , размещенное в службе общего хостинга.Приложение обслуживает приложение Angular в папке public_html .Мое приложение работает правильно, но при перезагрузке под-маршрутов я получаю сообщение об ошибке ниже.

Невозможно получить / суб-маршрут

, но это происходит только с под-маршрутами .

У меня установлено серверное приложение узла:

//import modules
var express = require('express'),
    bodyParser = require('body-parser'),
    morgan = require('morgan'),
    cors = require('cors');
    path = require('path');

var app = express();
var port = process.env.PORT || 3000;

//import database connection from dbconnect.js file
var mysql = require('./dbconnect/dbconnect');

//Parse as urlencoded and json.
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

//adding middleware - cors
app.use(cors());

//Http logger
app.use(morgan('dev'));

//Uncomment for production
app.use(express.static(__dirname + '/public'));
app.get('/*', (req,res) => res.sendFile(path.join(__dirname+'/public')));

app.use(function (req,res,next){
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "x-access-token, Origin, Content-Type, Accept");
    next();
});    

//import routes
var user = require('./routes/Users');  
    route = require('./routes/route');
    router = require('./router/router');
//adding routes
app.use('/api', user, route, router);

app.listen(port, function() {console.log('Server started at http://localhost:'+port+'/');});

Мой файл .htaccess настроен как

DirectoryIndex disabled
RewriteEngine On
RewriteRule ^$ http://127.0.0.1:3000/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://127.0.0.1:3000/$1 [P,L]

Я попытался изменить эту строку

app.get('/*', (req,res) => res.sendFile(path.join(__dirname+'/public')));

до

app.get('/*', (req,res) => res.sendFile(path.join(__dirname+'/public/index.html')));

Устраняет ошибку, но тогда мои маршруты API не работают, когда я делаю это.

1 Ответ

0 голосов
/ 27 сентября 2019

Эй, ребята, это сработало для меня.Перемещая маршруты API выше перехвата всех других маршрутов и возвращая индекс, который отсутствовал в моем коде.

На основании https://scotch.io/tutorials/mean-app-with-angular-2-and-the-angular-cli, я изменил свой код с:

// Point static path to public
app.use(express.static(__dirname + '/public'));
app.get('/*', (req,res) => res.sendFile(path.join(__dirname+'/public')));       

//import routes
var user = require('./routes/Users');  
    route = require('./routes/route');
    router = require('./router/router');
//adding routes
app.use('/api', user, route, router);

до

// Point static path to public
app.use(express.static(path.join(__dirname, 'public')));

//import routes from /routes/routes.js
  var user = require('./routes/Users');  
      route = require('./routes/route');
      router = require('./router/router');
 //adding routes
   app.use('/api', user, route, router);

 // Catch all other routes and return the index file
   app.get('/*', (req, res) => { res.sendFile(path.join(__dirname, 
    '/public/index.html'));
   });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...