2016-03-02 2 views
1

Я пытаюсь внедрить BrowserHistory для приложения React, использующего response-router. На основе the documentation, у меня в index.js:BrowserHistory in Node/Express с API

let express = require('express'); 
let harp = require('harp'); 
let path = require('path'); 

let app = express(); 

app.use(express.static(__dirname + "/dist")); 
app.use(harp.mount(__dirname + "/dist")); 

// BrowserHistory code 
app.get('*', function (request, response){ 
    response.sendFile(path.resolve(__dirname, 'dist', 'index.html')); 
}); 

let port = process.env.PORT || 3333; 
app.listen(port,() => console.log("Listening on port " + port)); 

// ... 
// Various app.get(...) endpoints below 
// ... 

Однако теперь это ловить все запросы API (например, я хочу, чтобы сделать запрос GET к /metric) и возвращение index.html вместо правильных данных в формате JSON.

Как реализовать версию BrowserHistory и иметь конечные точки API?

+1

Вам необходимо определить 'app.get ('*', ...)' after' app.get (...) 'для конечных точек. –

+0

@TimurBilalov спасибо! Я не понимал, что имеет значение порядок - счастлив принять ответ с вышеизложенным. –

ответ

2

Необходимо определить app.get('*', ...) после app.get(...) для конечных точек.

Если вы посмотрите на docs about "middleware", вы увидите, что экспресс-приложение выглядит как слоистый торт, каждый слой отвечает за что-то. Каждый запрос пропускает все слои. Слой может выполнить некоторый код, изменить req, res, а также вызывать для слоя next().

app.get('*', ...) обрабатывает все запросы и не вызывает next(), так что если вы определите это перед другими посредниками, они не будут выполнены.