jquery - Node.js and Socket.io not working on this Example -
can please take @ following code , let me know doing wrong on that? running node.js + express + socket.io on ubuntu 12.4 trying create simple push function. server working cant see div id "status" content on page , apparently function not running!
thanks , comment in advance , sorry long post!
here app.js file /** * module dependencies. */
var express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path'); var app = express(); // environments app.set('port', process.env.port || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyparser()); app.use(express.methodoverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); // development if ('development' == app.get('env')) { app.use(express.errorhandler()); } app.get('/', routes.index); app.get('/users', user.list); var status = "i not changed yet!."; io.sockets.on('connection', function (socket) { io.sockets.emit('status', { status: status }); socket.on('reset', function (data) { status = "you change text!"; io.sockets.emit('status', { status: status }); }); http.createserver(app).listen(app.get('port'), function(){ console.log('express server listening on port ' + app.get('port')); });
i modified "package.json" below, adding sockt.io dependencies
{ "name": "application-name", "version": "0.0.1", "private": true, "scripts": { "start": "node app.js" }, "dependencies": { "express": "3.2.3", "jade": "*", "socket.io:0.9.14" } }
in view folder , in index.jade have
<div id="status"></div> <button id="reset">reset!</button>
and in layout.jade have is:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> <meta name="description" content=""> <meta name="author" content=""> <!-- html5 shim, ie6-8 support of html elements --> <!--[if lt ie 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <!-- styles --> <link href="/css/main.css" rel="stylesheet"> </head> <body> <%- body %> <script src="node_modules/socket.io/socket.io.js"></script> <script src="public/js/libs/jquery.js"></script> <script src="public/js/main.js"></script> </body>
and function have in main.js:
var socket = io.connect(window.location.hostname); socket.on('status', function (data) { $('#status').html(data.status); }); $('#reset').click(function() { socket.emit('reset'); });
error message after editing robert hint
syntaxerror: unexpected end of input @ module._compile (module.js:439:25) @ object.module._extensions..js (module.js:474:10) @ module.load (module.js:356:32) @ function.module._load (module.js:312:12) @ function.module.runmain (module.js:497:10) @ startup (node.js:119:16) @ node.js:901:3
you're missing few basics: you're not loading socket.io
module (i'm assuming did install it, otherwise use npm install socket.io
first), you're not connecting http server, , you're not including client in template (as @ltebean pointed out).
server side first:
// app.js var express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path'); var app = express() , server = http.createserver(app) // create http server , io = require('socket.io').listen(server); // load socket.io , connect // http server ... // start listening server.listen(app.get('port'));
client side next:
// layout.jade ... <script src="/socket.io/socket.io.js"></script> ...
in main.js
, suggest using io.connect
auto-discovery:
var socket = io.connect(); // no argument means auto-discovery
also, package.json
invalid:
"socket.io:0.9.14" // not valid object property! "socket.io" : "0.9.14" // should
Comments
Post a Comment