BrowserHistory在Node / Express中使用API
我正在尝试为使用react-router的React应用程序实现BrowserHistory。 基于文档 ,我在我的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端点?
您需要在app.get('*', ...)
之后为端点定义app.get('*', ...)
。
如果你看看有关“中间件”的文档 ,你会发现快速应用看起来像一个分层的蛋糕,每一层负责一些东西。 每个请求都会抛出所有图层。 Layer可以执行一些代码,修改req
, res
,也可以调用next()
图层。
app.get('*', ...)
处理所有的请求,并且不会调用next()
,所以如果你在其他中间件之前定义它,它们将不会被执行。