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