1
나는 node.js의 초보자입니다. node.js를 사용하여 클라우드에 서버를 만들고 관리하는 webapp을 만들려고합니다. 몇 가지 연구를 한 후 nodeapp.js, socket.io, express 및 pkgcloud 모듈을 사용하여 webapp를 작성하기로 결정했습니다. 이제 내가 직면하고있는 문제는 서버를 만들 때 프런트 엔드/클라이언트쪽에 메시지를 보낼 수 없다는 것입니다. 서버가 성공적으로 생성되고 있지만 서버 상태를 브라우저 화면으로 보내는 방법을 얻지 못하고 있습니다. 하는 index.jsNode.js에서 처리기/콜백 메소드에서 클라이언트 측으로 메시지를 보내는 방법
var express = require('express'),
app = express();
app.use(express.static(__dirname + '/'));
var io = require('socket.io').listen(app.listen(1337));
io.sockets.on('connection', function(socket) {
socket.on('mesg_to_server', function(data) {
// This is for testing whether we're receiving msgs on client side
io.sockets.emit("mesg_to_client",{ mesg: data["mesg"], mesg1: data["mesg1"] });
var Rackspace = require('./ex_rackspace');
var rackspace = new Rackspace();
rackspace.create(data.mesg);
});
});
ex_rackspace.js :
var pkgcloud = require('pkgcloud'),
_ = require('./node_modules/pkgcloud/node_modules/underscore');
var client = pkgcloud.providers.rackspace.compute.createClient({
username: 'xxxx',
apiKey: 'xxxxx',
region: 'HKG'
});
// This function will handle our server creation,
// as well as waiting for the server to come online after we've
// created it.
function handleServerResponse(err, server) {
if (err) {
console.dir(err);
return;
}
console.log('SERVER CREATED: ' + server.name + ', waiting for active status');
// Wait for status: ACTIVE on our server, and then callback
server.setWait({ status: server.STATUS.running }, 5000, function (err) {
if (err) {
console.dir(err);
return;
}
console.log('SERVER INFO');
console.log(server.name);
console.log(server.status);
console.log(server.id);
console.log('Make sure you DELETE server: ' + server.id +
' in order to not accrue billing charges');
});
}
var Rackspace = function() {
};
Rackspace.prototype.test = function (text) {
console.log("provider: Rackspace: " + text);
}
// first we're going to get our flavors
Rackspace.prototype.create = function (server) {
client.getFlavors(function (err, flavors) {
if (err) {
console.dir(err);
return;
}
// then get our base images
client.getImages(function (err, images) {
if (err) {
console.dir(err);
return;
}
var flavor = _.findWhere(flavors, { name: '1 GB Performance' });
var image = _.findWhere(images, { name: 'CentOS 5 (PV)' });
// Create our first server
client.createServer({
name: server,
image: image,
flavor: flavor
}, handleServerResponse);
});
});
}
module.exports = Rackspace;
page.html (클라이언트 측) : 당신은 추가해야
<!DOCTYPE html>
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
// our socket.io code goes here
var socketio = io.connect("127.0.0.1:1337");
socketio.on("mesg_to_client", function(data) {
document.getElementById("chatlog").innerHTML = ("<hr/>" +
data.mesg + ' ' + data.mesg1 + document.getElementById("chatlog").innerHTML);
});
socketio.on("test_output", function(data) {
console.log(data.mesg);
});
function sendMessage() {
var msg = document.getElementById("mesg_input").value;
socketio.emit("mesg_to_server", { mesg : msg, mesg1 : "here"});
}
</script>
</head>
<body>
<input type="text" id="mesg_input"/>
<button onclick="sendMessage()">Create</button>
<div id="chatlog"></div>
</body>
</html>
그런 다음 그것을 사용할 수 있습니다. 사실, handleServerResponse에서 서버 생성이 함수 rackspace.create 내에서 시작될 때 호출되는 콜백 함수를 내보내려고합니다. socket.io를 rackspace.create (data.mesg, io)에 매개 변수로 전달하고 exServerPath.js에 전역 변수에 할당하여 handlerServerResponse에 사용할 수있는 방법을 찾았습니다. 이제 handlerServerResponse에서 클라이언트로 정보를 내보낼 수있게되었습니다. 그러나 나는 그렇게하는 것이 더 깔끔한 방법이 아니라고 생각합니다. 그것에 대한 어떤 생각? – devd