2017-01-10 24 views
0

我使用Node/Express作为API代理服务器,并且想知道是否可以呈现所有GET路由的HTML(index.html)页面以及在相同的端口上公开API端点。我正在使用客户端路由(react-router)。在同一端口上提供静态index.html和API

例如:

// 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/为前缀?

回答

1

如果你先暴露你的端点,然后提供你的html,它应该做的工作。

// Expose API 
api.all('/api/*', cb); 

// Serve HTML 
api.get('*', cb); 
0

制作一个名为public的目录。

把你的HTML和支持文件放在里面。

app.use(express.static(path.resolve('./public'))); 

//Your API routes here 

express.static将提供静态HTML文件,然后您可以添加您的路由语句。这将在同一个端口上工作。

+0

'express.static'如何为API服务? – Himmel

+0

不,'express.static'不会提供API。你现有的陈述将做到这一点。这将为'/'parth –

+0

上的index.html提供好像你可能不完全理解我的问题。这是一个路由问题,而不是一个静态文件。 – Himmel

相关问题