节点服务在本地工作但不在heroku上工作

时间:2017-10-14 13:54:18

标签: javascript node.js reactjs express heroku

我创建了一个简单的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);
    });
}

1 个答案:

答案 0 :(得分:0)

这是因为在部署时,当路由/users时,它会查找名为users.html的任何文件并且找不到它,因此返回503.您可以通过重定向所有文件来修复它通过将index.html来电替换为{/ 1}},路由至app.get

app.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, '..', 'build', 'index.html'));
});

看看here。看看它是否有效。