Невозможно получить / чат - PullRequest
0 голосов
/ 24 февраля 2020

Я новичок здесь. Я пытаюсь разработать веб-приложение и натолкнулся на кирпичную стену, на которой я застрял некоторое время.

При запуске моего приложения. js file отображаются все страницы, кроме чата. Может кто-нибудь взглянуть на код и помочь мне?

Я не включил свой код для регистрации и входа и т.д. c. как они работают нормально. Когда я использую их концепции 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}`));

1 Ответ

0 голосов
/ 27 февраля 2020

Прежде всего я хотел бы поблагодарить Cranky Coder; Прахер Лонде; и Сунил Лулла за ваши ответы.

В итоге я выяснил, как заставить чат показываться. Как упоминалось ранее, мои другие страницы (вход в систему и регистрация и т. Д. c.) Показывались нормально. В отличие от чата, у меня был бэкэнд для них в файле users. js. Поэтому я решил переместить код моего чата. js в своих пользователей. js, который затем вызывался в приложении. js (файл, который я запускаю) с помощью app.use ('/ users', require ('.routes / users. js')).

Затем я изменил свой код router.get на:

router.get('/chatroom', (req, res) => res.render('chatroom', {
  user: req.user
}));

Затем в моем router.post (см. OP для контекста ) Я добавил res.redirect ('/ users / chatroom'); перед закрытием с окончательной скобкой. Наконец, я, конечно, отредактировал свой файл .e js так, чтобы он имел

. Я обнаружил, что делать это таким образом еще лучше, потому что к чату нельзя получить доступ, если он не вошел в систему.

Спасибо еще раз для всех ваших ответов, и хотя это немного специфическая c проблема, я надеюсь, что это поможет кому-то в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...