我是新来的。我正在尝试开发一个web应用程序,但我遇到了一个障碍,我已经坚持了一段时间。
当运行我的app.js文件时,除了聊天室之外,所有的页面都会显示出来。有没有人可以看一下代码,帮我一下?
我还没有包括我的代码注册和登录等,因为他们工作得很好。当在聊天室中使用他们的router.get和.post概念时,我只收到一条"Cannot GET /chatroom“消息。
Chatroom.js:
const express = require('express');
const router = express.Router();
const socketClient = require('socket.io').listen(4000).sockets;
//Chatroom page: Credit - Traversy Media - https://www.youtube.com/watch?v=hrRue5Rt6Is&t=1542s
router.get('/chatroom', (req, res) => res.render('chatroom.ejs'));
router.post('/chatroom', (req, res) => {
// Connect to Socket.io
socketClient.on('connection', function (socket) {
let chat = db.collection('UsersDB/chats');
// Create function to send status
sendStatus = function (s) {
useUnifiedTopology: true,
socket.emit('status', s);
}
// Get chats from mongo collection
chat.find().limit(100).sort({ _id: 1 }).toArray(function (err, res) {
if (err) {
throw err;
}
// Emit the messages
socket.emit('output', res);
});
// Handle input events
socket.on('input', function (data) {
let name = data.name;
let message = data.message;
// Check for name and message
if (name == '' || message == '') {
// Send error status
sendStatus('Please enter a name and message');
} else {
// Insert message
chat.insert({ name: name, message: message }, function () {
socketClient.emit('output', [data]);
// Send status object
sendStatus({
message: 'Message sent',
clear: true
});
});
}
});
// Handle clear
socket.on('clear', function (data) {
// Remove all chats from collection
chat.remove({}, function () {
// Emit cleared
socket.emit('cleared');
});
});
});
});app.js:
const express = require('express');
const expressLayouts = require('express-ejs-layouts');
const mongoose = require('mongoose');
const passport = require('passport');
const flash = require('connect-flash');
const session = require('express-session');
const app = express();
// Passport Config
require('./config/passport')(passport);
// DB Config
const db = require('./config/keys').mongoURI;
// Connect to MongoDB
mongoose
.connect(
db,
{ useNewUrlParser: true }
)
.then(() => console.log('MongoDB Connected'))
.catch(err => console.log(err));
// EJS
app.use(expressLayouts);
app.set('view engine', 'ejs');
// Express body parser
app.use(express.urlencoded({ extended: true }));
// Express session
app.use(
session({
secret: 'secret',
resave: true,
saveUninitialized: true
})
);
// Passport middleware
app.use(passport.initialize());
app.use(passport.session());
// Connect flash
app.use(flash());
// Global variables
app.use(function(req, res, next) {
res.locals.success_msg = req.flash('success_msg');
res.locals.error_msg = req.flash('error_msg');
res.locals.error = req.flash('error');
next();
});
// Routes
app.use('/', require('./routes/index.js'));
app.use('/users', require('./routes/users.js'));
app.use('/chatroom', require('./routes/chatroom.js'));
const PORT = process.env.PORT || 5000;
app.listen(PORT, console.log(`Server started on port ${PORT}`));
发布于 2020-02-27 21:04:14
首先,我要感谢Cranky Coder、Prakher Londe和Sunil Lulla的回复。
我最终想出了如何让聊天室出现的方法。正如我之前提到的其他页面(登录和注册等)都表现得很好。与聊天室不同的是,我将这些的后端放在一个users.js文件中。所以我决定把我的chatroom.js代码移到我的users.js中,然后在app.js(我运行的文件)中用app.use('/users',require('.routes/users.js'))调用它。
然后我将我的router.get代码更改为:
router.get('/chatroom', (req, res) => res.render('chatroom', {
user: req.user
}));然后在我的聊天室中(上下文参见OP ),我添加了一个res.redirect('/users/chatroom');,最后一个括号结束。最后,我当然编辑了我的.ejs文件,使其具有
我发现这样做更好,因为除非登录,否则无法访问聊天室。
再次感谢你的回复,虽然这是一个具体的问题,但我真的希望这对未来的人有所帮助。
https://stackoverflow.com/questions/60368255
复制相似问题