如何解决将带有 mongo db 的 React 应用程序部署到 heroku 时遇到问题
我有一个 react 应用程序,当我执行 npm run start 时,它可以在本地运行,但无法在 heroku 上部署,我得到的唯一错误是“此应用程序可能未指定任何方式来启动节点进程”
这是目前我的 package.json 脚本
"start": "react-scripts start","start:prod": "node server/server.js","start:dev": "concurrently \"nodemon --ignore 'client/*'\" \"npm run client\"","client": "cd client && npm run start","seed": "node server/scripts/seedDB.js","install": "cd client && npm install","build": "cd client && npm run build","heroku-postbuild": "cd client && npm install --only=dev && npm install && npm run build"
},
还有我的文件构造器
//client
|
+-node modules
+ public
+-src
+-package-lock
+-package.json
//node_modules
//server
|
+-models
+-server.js
+-routes
+-middlewares
+-config
+-package-lock.json
+-package.json
这是我的 server.js
require('dotenv').config();
const express = require('express');
const morgan = require('morgan');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const dbConnection = require('./config/connection');
const passport = require('./config/passport');
const path = require('path');
const app = express();
const PORT = process.env.PORT || 8090;
// Middlewares
app.use(morgan('dev'));
app.use(express.urlencoded({extended: false}));
app.use(express.json());
app.use(express.static('client/build'));
app.get('*',(req,res) => {
return res.sendFile(path.resolve('client','build','index.html'));
});
// Passport
app.use(passport.initialize());
app.use(passport.session()); // will call the deserializeUser
app.use(session({
secret: 'my_secret',// process.env.AUTH_SECRET,store: new MongoStore({ mongooseConnection: dbConnection }),resave: false,saveUninitialized: false
}));
// app.get('/',res) => {
// res.sendFile(path.join(__dirname,'../client/build/'))
// });
// Add Auth and API routes
app.use('/auth',require('./routes/authRoutes'));
app.use('/api',require('./routes/apiRoutes'));
// If no routes are hit,send the React app
app.use(function(req,res) {
res.sendFile(path.join(__dirname,'../../client/build/index.html'));
});
// Error handler
app.use(function(err,req,res,next) {
console.error(err.stack);
res.status(500);
})
app.listen(PORT,() => {
console.log(`App listening on PORT: ${PORT}`);
});
然后是我在heroku上遇到的错误
此应用可能未指定任何方式启动节点进程
解决方法
您需要为节点服务器提供 react static 文件以实现您的目标。
将此添加到您的 server.js
app.use(express.static('client/build'));
app.get('*',(req,res) => {
return res.sendFile(path.resolve('client','build','index.html'));
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。