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

时间:2015-03-31 17:17:59

标签: 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 = 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>

现在工作!
致谢!!!

2 个答案:

答案 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()