Javascript 从Node.JS调用JS文件中的函数

Javascript 从Node.JS调用JS文件中的函数,javascript,jquery,node.js,Javascript,Jquery,Node.js,我试图做的是,当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

我试图做的是,当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>

节点测试
    发送 var socket=io(); 插座打开(“changeButton”,changeButton);

    现在工作

    谢谢

    更新:虽然这个答案在导入服务器端JS库方面在技术上是正确的,但这似乎不是您需要解决的问题@tony nardi解释了如何通过websocket连接发出服务器端事件,并在客户端对其作出反应。您应该这样做,并将app.js导入index.html

    您需要导入定义了
    changeButton()
    的代码:

    var lib = require('assets/app.js')
    
    然后在调用函数时引用该变量:

    lib.changeButton()
    

    更新:虽然这个答案在导入服务器端JS库方面在技术上是正确的,但这似乎不是您需要解决的问题@tony nardi解释了如何通过websocket连接发出服务器端事件,并在客户端对其作出反应。您应该这样做,并将app.js导入index.html

    您需要导入定义了
    changeButton()
    的代码:

    var lib = require('assets/app.js')
    
    然后在调用函数时引用该变量:

    lib.changeButton()
    

    更新:虽然这个答案在导入服务器端JS库方面在技术上是正确的,但这似乎不是您需要解决的问题@tony nardi解释了如何通过websocket连接发出服务器端事件,并在客户端对其作出反应。您应该这样做,并将app.js导入index.html

    您需要导入定义了
    changeButton()
    的代码:

    var lib = require('assets/app.js')
    
    然后在调用函数时引用该变量:

    lib.changeButton()
    

    更新:虽然这个答案在导入服务器端JS库方面在技术上是正确的,但这似乎不是您需要解决的问题@tony nardi解释了如何通过websocket连接发出服务器端事件,并在客户端对其作出反应。您应该这样做,并将app.js导入index.html

    您需要导入定义了
    changeButton()
    的代码:

    var lib = require('assets/app.js')
    
    然后在调用函数时引用该变量:

    lib.changeButton()
    

    changeButton在哪里定义?如果它是在index.html中定义的,则需要执行以下操作:

    if (msg == "add") {
      socket.emit("changeButton")
    }
    
    在客户端:

    socket.on("changeButton", changeButton);
    

    changeButton在哪里定义?如果它是在index.html中定义的,则需要执行以下操作:

    if (msg == "add") {
      socket.emit("changeButton")
    }
    
    在客户端:

    socket.on("changeButton", changeButton);
    

    changeButton在哪里定义?如果它是在index.html中定义的,则需要执行以下操作:

    if (msg == "add") {
      socket.emit("changeButton")
    }
    
    在客户端:

    socket.on("changeButton", changeButton);
    

    changeButton在哪里定义?如果它是在index.html中定义的,则需要执行以下操作:

    if (msg == "add") {
      socket.emit("changeButton")
    }
    
    在客户端:

    socket.on("changeButton", changeButton);
    

    我对这个问题稍加修改。changeButton在app.js中定义。我通过@joemfb-answer导入了代码。jQuery现在还没有定义,我认为这样做可能是错误的。正在服务器上加载jQuery。好的。如果要更改元素的颜色,则Javascript必须具有对HTML元素的访问权限。如果HTML元素位于index.HTML中,那么您需要在客户端运行Javascript。但是,您仍然可以使用套接字来控制它,就像在我的回答中一样。收到消息“color”后,只需向客户端发回一个事件,该事件将执行changeButton(必须在index.html范围内定义)。这有意义吗?我可能误解了你想要实现的目标。这有点道理。我会用所有代码更新这个问题。我稍微编辑了一下这个问题。changeButton在app.js中定义。我通过@joemfb-answer导入了代码。jQuery现在还没有定义,我认为这样做可能是错误的。正在服务器上加载jQuery。好的。如果要更改元素的颜色,则Javascript必须具有对HTML元素的访问权限。如果HTML元素位于index.HTML中,那么您需要在客户端运行Javascript。但是,您仍然可以使用套接字来控制它,就像在我的回答中一样。收到消息“color”后,只需向客户端发回一个事件,该事件将执行changeButton(必须在index.html范围内定义)。这有意义吗?我可能误解了你想要实现的目标。这有点道理。我会用所有代码更新这个问题。我稍微编辑了一下这个问题。changeButton在app.js中定义。我通过@joemfb-answer导入了代码。jQuery现在还没有定义,我认为这样做可能是错误的。正在服务器上加载jQuery。好的。如果要更改元素的颜色,则Javascript必须具有对HTML元素的访问权限。如果HTML元素位于index.HTML中,那么您需要在客户端运行Javascript。但是,您仍然可以使用套接字来控制它,就像在我的回答中一样。收到消息“color”后,只需向客户端发回一个事件,该事件将执行changeButton(必须在index.html范围内定义)。这有意义吗?我可能误解了你想要实现的目标。这有点道理。我会用所有代码更新这个问题。我稍微编辑了一下这个问题。changeButton在app.js中定义。我通过@joemfb-answer导入了代码。jQuery现在还没有定义,我认为这样做可能是错误的。正在服务器上加载jQuery。好的。如果要更改元素的颜色,则Javascript必须具有对HTML元素的访问权限。如果