直接访问Heroku上的快速路线,而无需提供React应用

时间:2019-05-22 08:30:26

标签: node.js reactjs express heroku routes

如果不在heroku上投放react-app,则无法直接到达快速路线。

我已经开发了一个在heroku上运行node.js / express后端的react-app。 react-app中的所有内容都可以正常运行。

现在,我需要访问一条明确的路由(例如https://example.com/api/info),该路由会调用mongo数据库,并且应该仅返回一些JSON。

问题是,Express始终服务于react-app。但是,我可以从react-app中访问快速路由并将其用于例如登录/注册(https://example.com/api/users/login)。如果不提供react-app,我无法直接在heroku的生产环境中访问它们。

由于heroku决定了Express应用程序所在的端口,因此我无法将代理添加到react-app的package.json

react-app在root> client文件夹中构建。 请在下面找到node.js / express服务器的根index.js文件

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const passport = require('passport');

const keys = require('./config/keys');

const auth = require('./routes/api/auth');
const mail = require('./routes/api/mail');
const newsletter = require('./routes/api/newsletter');

//connect to mongoDB
mongoose.connect(keys.mongoURI)
  .then(() => console.log('MongoDB Connected'))
  .catch(err => console.log(err));

const app = express();

// Body parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());


// Passport Config
app.use(passport.initialize());
require('./services/passportJwt')(passport);

// Routes
app.use('/api/users', auth);
app.use('/api/mail', mail);
app.use('/api/newsletter', newsletter);

app.get('/api/info', (req, res) => { //ROUTE DOESN'T WORK, SERVES REACT-APP
  res.json({ msg: "Some Info" });
});

// Serve React App in Production
if (process.env.NODE_ENV === 'production') {

// Express will serve up production assets, main.js/main.css
  app.use(express.static('client/build'));

// Express will serve up the index.html file if it doesn't recognize the route
  const path = require('path');
  app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
  });
}

// Use Heroku port or 5000 when in dev
const PORT = process.env.PORT || 5000;

app.listen(PORT);

预期结果:

到达“ https://example.com/api/info”时,应该接收JSON输出{“ msg”:“ Some info”}。 而是为react-app提供服务,而react-app无法识别react-router中的路由“ api / info”。

预先感谢您的帮助。

0 个答案:

没有答案