Question

I'm playing around with nodejs and specifically looking at nowjs

I've got now up and running on a server running node and I have a separate web server. I successfully have the node server returning the client script and I reference this on the web server. This returns a 200 response code and all looks well. However I get javascript errors telling me that 'now' is undefined. As far as I understand it the 'now' variable should be available via the client script but this doesn't seem to be the case. Does anyone know if this set-up is possible? So the set-up is similar to the below pseudo code

 //Server 1 node.com
 if(request.url === '/nowjs/now.js'){
      var file = 'path_to_clientlib/now.js';
  fs.readFile(file, function(e, data) {

        if (e) {
           throw e;
        }

         response.writeHead(200,{'Content-Type': 'application/javascript'});
          response.end(data);
}

and server.com

   <script src="/jquery.js"></script>
   <script src="http://node.com/nowjs/now.js"></script> <!-- This is returned properly -->
   <script>
   $(document).ready(function(){

    now.receiveMessage = function(name, message){
      $("#messages").append("<br>" + name + ": " + message);
    }

   $("#send-button").click(function(){
     now.distributeMessage($("#text-input").val());
     $("#text-input").val("");
   });

   now.name = prompt("What's your name?", "");

   });
   </script>

  <div id="messages"></div>
  <input type="text" id="text-input">
  <input type="button" value="Send" id="send-button">

Straight away the console just returns 'now' is not defined

Was it helpful?

Solution

First of all there are enough modules that provide static file serving support, but if you want to manually serve a file I would do it like this...

var mime = require('mime')   // Get mime type based on file extension. use "npm install mime"
  , util = require('util')
  , fs = require('fs');

function serveFile(filename, res) {
  var filePath = process.cwd() + filename;
  var stat = fs.statSync(filePath);

  res.writeHead(200, {
     'Content-Type':mime.lookup(filePath),
     'Content-Length':stat.size
  });

  var readStream = fs.createReadStream(filePath);

  return util.pump(readStream, res);
}

// Your code...

Or check out the module node-static on NPM or Github

About how to use NowJS (from the docs)

On the server

var httpServer = require('http').createServer(function(req, response){ 

  // See code above how to serve static files...

});

httpServer.listen(8080);

var nowjs = require("now");
var everyone = nowjs.initialize(httpServer);

everyone.now.logStuff = function(msg){
  console.log(msg);
}

On the client

<script type="text/javascript" src="http://localhost:8080/nowjs/now.js"></script>

<script type="text/javascript">
  now.ready(function(){
    // "Hello World!" will print on server
    now.logStuff("Hello World!");
  });
</script>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top