Browser-sync&lite-server: http-proxy-middleware перехватывает несуществующие URL-адреса

У меня есть следующая маршрутизация в приложении angular2:

/** Application routes */
const routes: Routes = [
    { path: '', component: LandingComponent },
    { path: 'about', component: AboutUsComponent },    
    // catch all path, should go after all defined paths
    { path: '**', component: PageNotFoundComponent }
];

Недавно мне пришлось добавить bs-config.js со следующим содержимым:

var proxy = require('http-proxy-middleware');

// note: serving from both ./dist and ./node_modules
// TODO: https?

// redirect all /api calls to the backend
var apiProxy = proxy('/api', {
    target: 'http://localhost:8080',
    pathRewrite: {
        '^/api' : '',    // rewrite path 
    },
    changeOrigin: true  // for vhosted sites
});

module.exports = {
    files : "./dist/**/*.{js, html, css}",
    server: {
        baseDir : ["./dist","node_modules"],
        middleware: {
            1: apiProxy
        },
        https : false
    },
    logLevel: "debug"
};

Все работает нормально, кроме доступа к страницам 404, т.е. если пользователь вводит неправильную ссылку, я просто вижу «Cannot GET /url» и ничего интересного в логах. Если я удалю только эти три строки:

        middleware: {
            1: apiProxy
        }, 

Он снова начинает работать, и я получаю страницу 404 на http://myapp/some/broken/url. .

Но мне нужен прокси для вещей, связанных с бэкэндом. Почему он мешает обычным путям API, хотя он должен проксировать только «API», такие как URL-адреса?

P.S. Я использую:

"http-proxy-middleware": "^0.17.2",
"lite-server": "^2.2.2",

person Vadim Kirilchuk    schedule 14.11.2016    source источник


Ответы (1)


Как-то исправил это, изменив на:

    middleware: {
        1: apiProxy,
        2: require('connect-history-api-fallback')({index: '/index.html', verbose: false})
    },
person Vadim Kirilchuk    schedule 14.11.2016