我使用Node / Express作为API代理服务器,想知道是否可以为所有GET路由以及在同一端口上公开API端点。我使用客户端路由(react-router)。
例如:
// Always return the main index.html, so react-router render the route in the client
app.get('*', (req, res) => {
const html = renderHTML(req, res);
res.send(html)
});
// Expose API
app.all('/api/*', (req, res, next) => {
proxyRequest(...)
});
问题在于,在执行GET请求时,第一个app.get()
会抓住它(例如:fetch('/api/accounts')
)。
我需要能够向任何API端点路由发出任何请求(除了/
)并让客户端发送任何方法(GET,PUT,POST ...)。
我可以将index.html
提供给所有客户端路由并且在同一端口上有GET端点吗?我可以将html提供给所有路径除了前缀为/api/
的路径吗?
答案 0 :(得分:1)
如果您首先公开您的端点然后提供您的html,它应该可以完成这项工作。
// Expose API
api.all('/api/*', cb);
// Serve HTML
api.get('*', cb);
答案 1 :(得分:0)
创建一个名为<script type="text/javascript" src="http://code.jquery.com/jquery-1.12.4.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<link type="text/css" href="css/ui-lightness/jquery-ui-1.8.19.custom.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.19.custom.min.js"></script>
的目录。
将您的public
和支持文件放入其中。
HTML
app.use(express.static(path.resolve('./public')));
//Your API routes here
将提供静态HTML文件,然后您可以添加路由语句。这将在同一个端口上运行。