在同一端口上提供静态index.html和API

时间:2017-01-10 05:06:14

标签: javascript node.js express

我使用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/的路径吗?

2 个答案:

答案 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文件,然后您可以添加路由语句。这将在同一个端口上运行。