我创建了一个简单的create-react-app应用程序和一个node.js表达服务器端。 本地工作(服务器服务ui和做api),但部署到heroku时 仅提供UI(任何API调用都获得503代码)
App.js
// Routes
// works both locally and on heroku
app.get('/ui', (req, res) => {
res.sendFile(path.resolve(__dirname,'build','index.html'));
});
// works only locally
app.use('/users',users);
app.use('/pledge',pledge);
反应路由器
<ThemeProvider theme={theme}>
<div>
<Router history={history}>
<div>
<Route path={'/ui/'} component={Header}/>
<Route exact={true} path='/ui/welcome' component={Welcome}/>
<Route exact={true} path="/ui/login" component={Login}/>
<Route exact={true} path="/ui/help" component={Help}/>
<Route exact={true} path="/ui/dashboard" component={DashBoard}/>
<Route exact={true} path='/ui/logout' component={Logout}/>
<Route exact={true} path='/ui/pledge' component={Pledge}/>
<Route exact={true} path='/ui/buckets' component={Bucket}/>
<Route exact={true} path='/ui/add' component={AddStuff}/>
<Route exact={true} path='/ui/motion' component={MotionInput}/>
<Route exact={true} path='/ui/status' component={Status}/>
</div>
</Router>
</div>
</ThemeProvider>
没有服务器端渲染。 API的示例:
app.post('/usersAdd',(req, res) => {
let newUser = new User(req.body);
newUser.save((err) => {
if (err)
return res.send(500, {error: err});
return res.send("successfully saved");
});
});
API调用
export function getUsers() {
return new Promise((resolve, reject) => {
axios.get(serverProps.server + serverProps.getUsers, {
headers: {
'Access-Control-Allow-Origin': '*'
}
})
.then(resolve)
.catch(reject);
});
}
答案 0 :(得分:0)
这是因为在部署时,当路由/users
时,它会查找名为users.html的任何文件并且找不到它,因此返回503.您可以通过重定向所有文件来修复它通过将index.html
来电替换为{/ 1}},路由至app.get
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, '..', 'build', 'index.html'));
});
看看here。看看它是否有效。