Database trong mongoose

nodejs
mongodb
mongoose

(Lê Minh Cường) #1

Em muốn lưu dữ liệu tin nhắn vào database của mongoDB, khi user truy cập sẽ load tin nhắn lên lại, nhưng em gặp 1 vấn đề là sau khi user A chat thì dữ liệu được lưu vào database rồi nhưng khi người B truy cập lại không thấy, phải load lại server thì mới hiện được database

Code Bên server

var data_from_server;
user.find(function(err, users) {
  if (err) {
    console.log("Can't get data from server ");
    return null;
  } else {
    data_from_server = JSON.stringify(users);
  }
});

io.on('connection', function(socket) {
  console.log('Co nguoi ket noi ' + socket.id);
  socket.on('disconnect', function() {
    console.log(socket.id + ' ngat ket noi ');
  });
  socket.on('Client-send-data', function(data) {
    var new_message = new user();
    new_message.mess = data;
    console.log(socket.id + ' gui 1 tin nhan ' + data);
    new_message.save(function(err) {
      if (err) console.log('Error on save!');
    });
    io.sockets.emit('Server-send-data', data);
  });
  socket.emit('Server-send-all-data', data_from_server);
});

Code bên client

var socket = io('localhost:3000');
socket.on('Server-send-data', function (data) {
  var p = document.createElement('p');
  var text = document.createTextNode(data);
  p.appendChild(text);
  document.getElementById('content').appendChild(p);
});

socket.on('Server-sent-all-data', function (data) {
  data = JSON.parse(data);
  for (var i = 0; i < data.length; i++) {
    var p = document.createElement('p');
    var text = document.createTextNode(data[i].mess);
    p.appendChild(text);
    document.getElementById('content').appendChild(p);
  }
});

Code bên client:
http://codepad.org/R0GcqxCw
Code bên server:
http://codepad.org/WrnzEZPS


(EternalRerosu) #2

Server dòng 62,63, bạn nên để socket emit vào callback của function save() để đảm bảo nó vào database rồi mới emit event ‘server-sent-all-data’


(Lê Minh Cường) #3


Theo ý bạn là vậy đúng không?


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?