【发布时间】:2016-11-06 12:43:30
【问题描述】:
我的问题是,如果我直接在 mongodb 中手动添加一条消息,我怎样才能使其在活动 UI 客户端页面中自动可见而无需刷新。 我的代码如下。我的情况是,当新客户端访问页面时,会显示 mongo 中的现有记录,从而保持连接。但是,如果我直接在 mongo 中添加一条记录并加载一个新客户端,则只有该记录才会有记录,而其他人只有在刷新时才能获得它。
app.js(服务器端脚本)
mongoose.connect("mongodb://localhost:27017/some");
var mschema=mongoose.Schema({
message: String,
time : {type:Date ,default: Date.now}
});
io.sockets.on('connection', function (socket) {
chatmsg.find({},function(err,docs)
{
if(err)
console.log("errorr");
else
socket.emit('old msgs',docs);
})
socket.on('message', function(message) {
var newmsg=new chatmsg({message : message});
newmsg.save(function(err)
{
if(err)
{
console.log("error");
}
else
io.sockets.emit('new message',message) ;
})
})
controller.js(客户端脚本)
var socket=io("http://localhost:3200");
$scope.sendemit=function()
{
console.log("inside function"+$scope.textchat);
socket.emit('message', $scope.textchat);
$scope.textchat="";
}
socket.on('new message', function (message) {
$("#chat").append(message+"<br/>");
} );
socket.on('old msgs',function(docs)
{
for(var i=0;i<docs.length;i++)
{
console.log(JSON.stringify(docs[i].message));
$("#chat").append(docs[i].message+"<br/>");
}
})
index.html
<form >
<input class="form-control" type="text" ng-model="textchat">
<button class="btn btn-success" ng-click="sendemit()">Send</button>
</form>
</div>
<div class="container-fluid">
<div id="chat"></div>
</div>
【问题讨论】:
标签: angularjs node.js mongodb socket.io mean-stack