带有API的Node / Express中的BrowserHistory

时间:2016-03-02 01:12:39

标签: node.js express react-router browser-history

我正在尝试为使用react-router的React应用程序实现BrowserHistory。根据{{​​3}},我的index.js

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请求(例如,我想向/metric发出GET请求)并返回index.html而不是正确的JSON数据。

如何实现BrowserHistory并拥有API端点?

1 个答案:

答案 0 :(得分:2)

您需要在app.get('*', ...)之后为端点定义app.get(...)

如果你看看docs about "middleware",你会发现快递应用程序看起来像一个分层蛋糕,每一层都负责某事。每个请求传递抛出所有层。图层可以执行一些代码,修改reqres,也可以调用next()图层。

app.get('*', ...)处理所有请求,并且不会调用next(),因此如果您在其他中间件之前定义它,则不会执行它们。