我想要做的是当index.html将消息发送回服务器时,我想调用app.js
中名为changeButton()
的函数,该函数将更新index.html上的标题颜色
这是我的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位于assets / 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>
现在工作!
致谢!!!
答案 0 :(得分:2)
changeButton在哪里定义?如果它在index.html中定义,那么您需要执行以下操作:
if (msg == "add") {
socket.emit("changeButton")
}
并在客户端:
socket.on("changeButton", changeButton);
答案 1 :(得分:1)
更新:虽然这个答案在技术上对于导入服务器端JS库是正确的,但这似乎不是您需要解决的问题。 @ tony-nardi解释了如何通过websocket连接发出服务器端事件,并对客户端做出反应。你应该这样做,并将app.js导入index.html。
您需要导入定义changeButton()
的代码:
var lib = require('assets/app.js')
然后在调用函数时引用该变量:
lib.changeButton()