Node.js Heroku部署的MERN应用程序,仅显示;“未找到”;
我已经编写了一个MERN应用程序,它在本地工作并推送到heroku,但当我转到heroku应用程序链接时,它只显示“未找到”。我已经检查了我的package.json构建脚本,并添加了express route来服务静态文件,但得到了相同的结果。客户机文件夹位于根/后端文件夹中,由create-react-app创建。这是我的server.js:Node.js Heroku部署的MERN应用程序,仅显示;“未找到”;,node.js,reactjs,express,heroku,mern,Node.js,Reactjs,Express,Heroku,Mern,我已经编写了一个MERN应用程序,它在本地工作并推送到heroku,但当我转到heroku应用程序链接时,它只显示“未找到”。我已经检查了我的package.json构建脚本,并添加了express route来服务静态文件,但得到了相同的结果。客户机文件夹位于根/后端文件夹中,由create-react-app创建。这是我的server.js: const express = require('express'); const path = require('path'); const mon
const express = require('express');
const path = require('path');
const mongoose = require('mongoose');
const socketio = require('socket.io');
require('dotenv').config();
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const cors = require('cors');
const expressSession = require('express-session');
const commentroutes = require('./routes/commentRoutes');
const postRoutes = require('./routes/postRoutes');
const userRoutes = require('./routes/userRoutes');
const messageRoutes = require('./routes/messageRoutes');
const searchRoutes = require('./routes/searchRoutes');
const statusRoutes = require('./routes/statusRoutes');
const User = require('./models/user');
const PrivateMessage = require('./models/privateMessage');
const app = express();
app.use(cors());
// parse application/x-www-form-urlencoded
app.use(bodyParser.json());
app.use(
expressSession({
secret: process.env.SECRET || 'local development secret',
saveUninitialized: false,
resave: false
})
);
// ##### ROUTES #####
app.use('/user', userRoutes);
app.use('/post', postRoutes);
app.use('/comment', commentroutes);
app.use('/message', messageRoutes);
app.use('/search', searchRoutes);
app.use('/status', statusRoutes);
let onlineUsers = {};
if (process.env.NODE_ENV === 'production') {
//set static folder
app.use(express.static('client/build'));
}
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
});
mongoose
.connect(process.env.MONGO_URI, { useNewUrlParser: true })
.then(res => {
const expressServer = app.listen(process.env.PORT || 8000);
console.log('listening on port 8000');
// BEGIN SOCKET IO:
const io = socketio(expressServer);
io.on('connection', socket => {
console.log('online users: ', onlineUsers, 'new user: ', socket.id);
const setUpCurrentChatUser = async () => {
const token = socket.handshake.query.token;
if (!token) {
console.log('no token auth denied');
} else {
try {
const decoded = jwt.verify(token, process.env.SECRET);
// console.log('DECODED: ', decoded);
let current_time = Date.now() / 1000;
if (decoded.exp < current_time) {
console.log('expired');
// token is expired, not authorized
} else {
let decodedUser = await User.findOne({
_id: decoded.tokenUser.userId
});
const currentUser = {
userId: decodedUser._id,
socketId: socket.id
};
onlineUsers = addUser(onlineUsers, currentUser);
const currentUserFriendList = decodedUser.friendList;
const modifiedFriendList = currentUserFriendList.map(friend => {
if (friend in onlineUsers) {
const newFriend = {
friendId: friend,
isOnline: true,
socketId: onlineUsers[friend].socketId
};
return newFriend;
} else if (!(friend in onlineUsers)) {
const newFriend = {
friendId: friend,
isOnline: false,
socketId: null
};
return newFriend;
}
});
socket.emit('friendList', modifiedFriendList);
}
} catch (error) {
console.log('jwt error ');
}
}
};
setUpCurrentChatUser();
const addUser = (userList, user) => {
let newList = Object.assign({}, userList);
newList[user.userId] = user;
return newList;
};
socket.on('newPrivateMessageFromClient', async message => {
console.log('newPrivateMessageFromClient: ', message);
const friendId = message.currentFriend.friendId;
const friendSocketId = onlineUsers[friendId].socketId;
const newPrivateMessage = new PrivateMessage({
sender: message.senderId,
recipient: message.currentFriend.friendId,
participants: [message.senderId, message.currentFriend.friendId],
content: message.message
});
newPrivateMessage.save().then(result => {
console.log('newPrivateMessage: ', result);
//to friend
io.to(`${friendSocketId}`).emit('privateMessageFromServer', result);
//to sender
const userSocketId = onlineUsers[message.senderId].socketId;
console.log('USER SOCKET ID: ', userSocketId);
io.to(`${userSocketId}`).emit('ownPrivateMessageFromServer', result);
});
});
socket.on('updateFriendList', async friendList => {
const modifiedFriendList = friendList.map(friend => {
if (friend in onlineUsers) {
const newFriend = {
friendId: friend,
isOnline: true,
socketId: onlineUsers[friend].socketId
};
return newFriend;
} else if (!(friend in onlineUsers)) {
const newFriend = {
friendId: friend,
isOnline: false,
socketId: null
};
return newFriend;
}
});
socket.emit('friendList', modifiedFriendList);
});
socket.on('disconnect', async socketId => {
try {
const token = socket.handshake.query.token;
const decoded = jwt.verify(token, 'speakfriendandenter');
const userId = decoded.tokenUser.userId;
console.log(
'DISCONNECT, socket id: ',
socketId,
'decoded.tokenUser.userId: ',
decoded.tokenUser.userId
);
delete onlineUsers[userId];
console.log('updated online users after disconnect: ', onlineUsers);
} catch (err) {
console.log(err);
}
});
});
})
.catch(err => console.log(err));
将其更改回
index.js
,然后尝试以下操作:
app.get('*', (request, response) => {
response.sendFile(path.join(__dirname, 'client/build', 'index.html'));
});
});
将其更改回
index.js
,然后尝试以下操作:
app.get('*', (request, response) => {
response.sendFile(path.join(__dirname, 'client/build', 'index.html'));
});
});
在构建它之后,它会给出任何错误吗?不会,当我推它时,它会成功构建。上面写着:远程:-->构建成功!远程:-->发现进程类型远程:Procfile声明类型->(无)远程:buildpack的默认类型->web远程:远程:-->压缩。。。远程:完成:37.3M远程:-->启动。。。remote:发布v13 remote:deployed to heroku尝试将包中的
“main”:“index.js”
更改为“main”:“server.js”
,重新生成并重新部署。我更改为“main”:“server.js”,并推送到heroku master,但它仍然只显示“Not Found”(未找到),在构建后是否出现任何错误?否,当我推它时,它成功构建。上面写着:远程:-->构建成功!远程:-->发现进程类型远程:Procfile声明类型->(无)远程:buildpack的默认类型->web远程:远程:-->压缩。。。远程:完成:37.3M远程:-->启动。。。remote:发布v13 remote:deployed to Herokutry将您的“main”:“index.js”
更改为“main”:“server.js”
,重新生成并重新部署。我更改为“main”:“server.js”,并推送到heroku master,但当我添加以下内容时,它仍然只显示“未找到”:“errno”:-2,“code”:“enoint”,“syscall”:“stat”,“path”:“/app/client/build/index.html”,“expose”:false,“statusCode”:404,“status”:404}同样,当我使用“git commit”时,现在我得到了“未为提交准备的更改:modified:client(修改的内容,未跟踪的内容)“但其他变化似乎已被成功跟踪/添加/提交/pushed@rollerpigeon好的,摆脱它,尝试上面的方法,把前两个变量放在上面,然后尝试上面的最后一部分。我创建了新文件夹,复制了文件,删除了.git文件,并用git init重新初始化了它。我注意到上传大小从37MB增加到70MB以上,我想是因为我的客户端文件夹中有一个.git文件,它没有被推送或跟踪,因为它没有作为子模块添加。不过我不太确定。感谢您的帮助,我无法表达看到这件事部署的满足感。当我补充说我得到了这个:{“errno”:-2,“code”:“enoint”,“syscall”:“stat”,“path”:“/app/client/build/index.html”,“expose”:false,“statusCode”:404,“status”:404}当我现在使用“git commit”时,我也得到了未为提交暂存的更改:已修改:客户端(已修改的内容、未跟踪的内容)“但其他变化似乎已被成功跟踪/添加/提交/pushed@rollerpigeon好的,摆脱它,尝试上面的方法,把前两个变量放在上面,然后尝试上面的最后一部分。我创建了新文件夹,复制了文件,删除了.git文件,并用git init重新初始化了它。我注意到上传大小从37MB增加到70MB以上,我想是因为我的客户端文件夹中有一个.git文件,它没有被推送或跟踪,因为它没有作为子模块添加。不过我不太确定。谢谢你的帮助,我无法表达看到这个东西部署的满足感。