Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法访问/聊天室_Javascript_Node.js_Mongodb_Express_Socket.io - Fatal编程技术网

Javascript 无法访问/聊天室

Javascript 无法访问/聊天室,javascript,node.js,mongodb,express,socket.io,Javascript,Node.js,Mongodb,Express,Socket.io,我是新来的。 我正在尝试开发一个web应用程序,但我遇到了一个困难,我已经坚持了一段时间 运行我的app.js文件时,除聊天室外,所有页面都会显示。有人能帮我看一下密码吗 我还没有包括我的注册和登录等代码,因为它们工作良好。在使用他们的router.get和.post聊天室概念时,我只收到一条“无法获取/聊天室”消息 Chatroom.js: const express = require('express'); const router = express.Router(); const so

我是新来的。 我正在尝试开发一个web应用程序,但我遇到了一个困难,我已经坚持了一段时间

运行我的app.js文件时,除聊天室外,所有页面都会显示。有人能帮我看一下密码吗

我还没有包括我的注册和登录等代码,因为它们工作良好。在使用他们的router.get和.post聊天室概念时,我只收到一条“无法获取/聊天室”消息

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}`));

首先,我要感谢古怪的程序员;普拉赫·隆德;谢谢你的回复

我终于想出了如何让聊天室出现的办法。如前所述,我的其他页面(登录和注册等)显示良好。与聊天室不同,我在一个users.js文件中为这些设置了后端。因此,我决定将chatroom.js代码移动到我的users.js中,然后在app.js(我运行的文件)中使用app.use('/users',require('.routes/users.js')调用它

然后,我将我的路由器。获取代码更改为:

router.get('/chatroom', (req, res) => res.render('chatroom', {
  user: req.user
}));
然后在我的router.post(见OP了解上下文)中添加了res.redirect(“/users/chatroom”);在用最后一个括号闭合之前。 最后,我当然编辑了我的.ejs文件

我发现这样做更好,因为聊天室只有登录才能访问


再次感谢您的回复,虽然这是一个有点特殊的问题,但我希望这对将来的人有所帮助。

这是一条顶级路线吗?此路由器/文件在何处/如何使用?是否将其导出并在另一个文件中用于注册路由?如果是的话,我们可以看一些更多的代码来了解更多的内容吗?谢谢你的回复!是的,我展示的是chatroom.js文件,我在app.js(我运行)中再次调用该文件,使用app.use('/chatroom',require('./routes/chatroom.js');-我对login和register也做了同样的操作,它们工作得很好。我认为,因为您已经将路由指定为“/chatroom”,所以不需要在chatroom.js中显式指定它。将
router.get('/chatroom')
更改为
router.get('/')
。我想会有用的。你试过了吗?我认为你应该有
路由器。get('/')