如果不在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”。
预先感谢您的帮助。