2015-03-31 43 views
0

我想要做的是當index.html發送消息回服務器,我想調用app.js函數changeButton()將更新索引上的標題顏色。 HTML。從Node.js的JS文件中調用函數

這裏是我的node.js文件:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var express=require('express'); 

var tools = require('./assets/js/app.js'); 
app.use(express.static(__dirname + '/assets')); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

io.on('connection', function(socket){ 
    socket.on('chat message', function(msg){ 
     console.log('message: ' + msg); 
     if(msg == "color") { 
     socket.emit("changeButton"); //working now 
     } 
    }); 
}); 

http.listen(3000, function(){ 
    console.log('listening on localhost:3000'); 
}); 

app.js是資產/ JS文件夾。

function getMessage() { 
    $('form').unbind('submit').bind('submit', function(){ 
     socket.emit('chat message', $('#m').val()); 
     $('#m').val(''); 
     return false; 
    }); 
} 

function changeButton() { 
    $('#status').css("background-color", "red"); 
} 

這裏是index.html的

<!DOCTYPE html> 
<html> 
    <head> 
    <!-- app.js --> 
    <script src="js/app.js"></script> 
    <!-- app.css --> 
    <link rel="stylesheet" type="text/css" href="css/app.css"/> 
</head> 
<body> 
    <h1 id="status"> Node Test </h1> 

    <ul id="messages"></ul> 
     <form action=""> 
      <input id="m" autocomplete="off" /><button onclick="getMessage();">Send</button> 
     </form> 

    <script> 
     var socket = io(); 
     socket.on("changeButton", changeButton); 
    </script> 
</body> 

現在的工作!
謝謝!

回答

2

哪裏changeButton定義?如果在index.html的定義,那麼你就需要做一些事情,如:

if (msg == "add") { 
    socket.emit("changeButton") 
} 

,並在客戶端:

socket.on("changeButton", changeButton); 
+0

我編輯了一些問題。 changeButton在app.js中定義。我通過@joemfb答案導入了代碼。現在沒有定義jQuery,我認爲這可能是錯誤的是要去做這件事。在服務器上加載jQuery。 – NorCalKnockOut 2015-03-31 17:35:49

+0

好的很酷。 如果您想要更改元素的顏色,那麼JavaScript必須有權訪問HTML元素。如果HTML元素位於index.html中,那麼您需要在客戶端運行Javascript。 但是,你仍然可以使用套接字來控制這個,就像在我的答案中一樣。一旦得到消息「顏色」,只需向客戶端發回一個將執行changeButton(必須在index.html作用域中定義)的事件。那有意義嗎?我可能會誤解你想完成的事情。 – 2015-03-31 17:46:05

+0

這是有道理的,有點。我用所有的代碼更新問題 – NorCalKnockOut 2015-03-31 17:49:23

1

更新:雖然這個答案在導入服務器端JS庫方面在技術上是正確的,但這似乎不是你需要解決的問題。 @ tony-nardi解釋瞭如何通過websocket連接發送服務器端事件,並對客戶端做出反應。你應該這樣做,並將app.js導入到你的index.html中。

您需要進口,其中changeButton()定義代碼:

var lib = require('assets/app.js') 

,然後調用函數時引用該變量:

lib.changeButton() 
+0

謝謝你的幫助。林混合我的問題,對不起! – NorCalKnockOut 2015-03-31 17:54:34