通过 socket.io 将 ACE 编辑器更改作为单个字符串发送到 mongodb



HTML:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Editor</title>
<style type="text/css" media="screen">
body {
    overflow: hidden;
}
#editor {
    margin: 0;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
}
</style>
</head>
<body>
<script src="http://127.0.0.1:8080/socket.io/socket.io.js"> </script>
<script>
(function(){
  var getNode = function(s){
    return document.querySelector(s);
   },
  textarea = getNode('.code editor');
  try{
   var socket = io.connect('http://127.0.0.1:8080');
  } catch(e){
  }
  if(socket !== undefined){

//put latest string in DB to ACE
socket.on('output', function(data){
  if(data.length){
    var x = data.length-1;
    editor.setValue(data[x].code);
  }
});

socket.on('code-changes', function(){
  editor.on("change", function(data){
    var code = editor.getValue();
    code = data;
    socket.emit('input',{
      code: data
    });
  });
});

/*
// after keydown put new string to DB
  editor.on('change', function(data){
    var code = editor.getValue();
      socket.emit('input',{
        code: code
      });
  });
 //if(asciiValue <=0 || asciiValue >= 255){
    socket.emit('input',{
      code: code
    });
    console.log("inserted");
 */
}
})();
</script>
<div id="aceEditor" style="height: 500px; width: 500px">some text</div>
 <script src="src-noconflict/ace.js" type="text/javascript" charset="utf-8"> </script>
 <script>
 var editor = ace.edit("aceEditor");
 var code = editor.getValue();
 //editor.setValue("new code here");
 editor.getSession().setValue(editor.getValue(), 1);
 editor.setTheme("ace/theme/twilight");
 editor.session.setMode("ace/mode/javascript");
 </script>
 </body>
 </html>

服务器.js:

var mongo = require('mongodb').MongoClient;
var app = require('express')();
var http = require('http').Server(app);
var client = require('socket.io')(http);//.listen(8080).sockets;
app.get('/', function(req, res){
    res.sendFile(__dirname + '/static' + '/index.html');
});
mongo.connect('mongodb://127.0.0.1/code', function(err, db){
    if(err) throw err;
    client.on('connection', function(socket){
    var col = db.collection('messages');
    col.find().limit(3).sort({_id: 1}).toArray(function(err, res){
        if(err) throw err;
        socket.emit('output',res);
    });
    socket.on('input', function(data){
        var code = data.code;
        client.emit('output', [data]);
        console.log(data);
        col.insert({code: code}, function(){
            console.log("inserted");
        })
    });
});
});
http.listen(8080, function(){
    console.log('listening on 8080');
});

我在通过 socket.emit 将代码从 ace 编辑器发送到 mongodb 时遇到问题。我不明白为什么代码不发送到 mongo。我尝试使用 editor.getValue() 发出代码;我不确定 100% 编辑器如何(更改)完全工作.....任何提示将不胜感激。

我认为你在这里做错了:

//socket.on('code-changes', function(){ // Editor's changes should not be within socket event handling
  editor.on("change", function(data){
    var code = editor.getValue();
    code = data;
    socket.emit('input',{
      code: data
    });
  });
//});

最新更新