Приложение перестает работать после переключения с локального хоста на URI mLab mongodb - PullRequest
0 голосов
/ 28 ноября 2018

Я расширил проект приложения чата с курса для узлов, который использует express и socket.io.Я включил больше маршрутов, которые облегчают / регистрация / вход / выход из системы.Все отлично работает в местной среде.Если я просто изменю свой URI mongodb на свою ссылку в изолированной среде mLab, маршрут входа в приложение будет прерван.Я искал бесчисленные темы для решения, но ни одно из предложений не сработало.Я довольно новичок в ноде, поэтому я могу просто упустить что-то, что было бы очевидно опытным разработчикам.

Вот ошибка, которая выдается:

events.js:167
      throw er; // Unhandled 'error' event
      ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:470:11)
    at ServerResponse.header (/Users/B/Desktop/shadow-gab/node_modules/express/lib/response.js:767:10)
    at ServerResponse.send (/Users/B/Desktop/shadow-gab/node_modules/express/lib/response.js:170:12)
    at User.findOne (/Users/B/Desktop/shadow-gab/server.js:128:27)
    at /Users/B/Desktop/shadow-gab/node_modules/mongoose/lib/model.js:4533:16
    at process.nextTick (/Users/B/Desktop/shadow-gab/node_modules/mongoose/lib/query.js:2584:28)
    at process._tickCallback (internal/process/next_tick.js:61:11)
Emitted 'error' event at:
    at /Users/B/Desktop/shadow-gab/node_modules/mongoose/lib/model.js:4535:13
    at process.nextTick (/Users/B/Desktop/shadow-gab/node_modules/mongoose/lib/query.js:2584:28)
    at process._tickCallback (internal/process/next_tick.js:61:11)
[nodemon] app crashed - waiting for file changes before starting...

Вот POST-маршрут, который приводит к сбою приложения:

    app.post('/chat', (req, res) => {
  if (!req.session.screenname) {
    console.log(req.body);

    User.findOne({ screenname: req.body.screenname }, (err,doc) => {
      if (err) {
        console.log(err);
        res.status(500).send('error occured');
      } else if (!doc) {
        res.status(500).send('Account doesn\'t exist. Please sign up.');
      } else if (doc) {
        let valid = bcrypt.compareSync(req.body.password, doc.password);

        if (!valid) {
          res.status(500).send('Incorrect Password');
        } else if (valid) {
          req.session.screenname = req.body.screenname;
          console.log(req.session);
          io.on('connection', (socket) => {
            console.log('New user connected');

            socket.on('join', (params, callback) => {
              if (!isRealString(req.body.screenname) || !isRealString(req.body.room)) {
                return callback('Name and room name are required');
              }

              socket.join(req.body.room);
              users.removeUser(socket.id);
              users.addUser(socket.id, req.body.screenname, req.body.room);

              io.to(req.body.room).emit('updateUserList', users.fetchUserList(req.body.room));
              socket.emit('newMessage', generateMessage('Admin', `Welcome to ${req.body.room} room`));
              socket.broadcast.to(req.body.room).emit('newMessage', generateMessage('Admin', `${req.body.screenname} has joined`));
              callback();

            });
          });
        }
      }
    });
  }
  res.sendFile(path.join(__dirname + '/public/chat.html'));
});

Казалось бы, наиболее распространенным ответом на подобные вопросы был поиск мест, где вы пытаетесь сделать более одногоответ на запрос, но я нигде не вижу, где я это делаю.

Опять же, я могу просто переключить URL-адрес БД на мою локальную машину, и все работает отлично.Любое направление будет приветствоваться

РЕДАКТИРОВАТЬ : приложение не работает с первой попытки входа в систему, но если я использую маршрут выхода из системы, а затем войдите назад в,приложение работает.Все еще не уверен, что вызывает это

...