2017-01-10 76 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

相關問題