CODeeerrrrrrrr
CODeeerrrrrrrr

Reputation: 598

how can i include JavaScript file in node.js app?

i am accessing the script.js and libs.js in index.html like this:

<body style='margin:0px' >
<canvas id='your_canvas'
        style='position: absolute; background-color: black;'></canvas>

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript" src="/libs.js"></script>
<script type="text/javascript" src="/script.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
    jQuery(function($){

        main(); //this function is inside of script.js

    });
</script>

but the .js files cannot be accessed and showing error:

1) GET script.js 404 (Not Found) localhost/:12.
2) GET libs.js 404 (Not Found) localhost/:11.
3) Uncaught ReferenceError: main is not defined (index):17.

where am i going wrong and how can i include these two JavaScript files using node.js?

my app.js is :

 var express = require("express"),
 app = express(),
 server = require("http").createServer(app),
 io = require("socket.io").listen(server);
server.listen(8000);

app.get('/', function(req, res){
res.sendfile(__dirname + '/index.html');
});

app.use(express.static(__dirname + '/public/script.js'));
app.use(express.static(__dirname + '/public/libs.js'));

 io.sockets.on('connection', function(socket) {
    socket.on('send coordinates',function(data){
    io.sockets.emit('coordinates', data);
    });

});

and then i have my script.js and libs.js files.

Upvotes: 3

Views: 5901

Answers (2)

neelsg
neelsg

Reputation: 4842

You need to actually serve these files if you want them to be accessible. You can't just include them in your project directory. If you are using Express, you can designate a static file directory like this:

app.use(express.static(__dirname + '/public'));

You can also use node-static or even create a handler for each file...

Using express, your code should look something like this (Not tested):

var express = require("express");
var app = express();
app.server = require('http').createServer(app);
var io = require("socket.io").listen(app.server);

app.get('/', function(req, res){
    res.sendfile(__dirname + '/public/index.html'); // I would move this file to public
});

app.use(express.static(__dirname + '/public'));

io.sockets.on('connection', function(socket) {
    socket.on('send coordinates',function(data){
        io.sockets.emit('coordinates', data);
    });
});

app.server.listen(8000);

Upvotes: 2

Kitson
Kitson

Reputation: 1283

Are you trying to call:

<script>
jQuery(function($){

    main(); //this function is inside of script.js

});
</script>

If you are then you need to save your code as a file named script.js in the root directory. Adding javascript/jQuery between tags in your html does not need to be called and will run automatically.

I'd advise laying your script out in the following way too, i don't recognize the way you have laid it out.

<script>

var main = function() {
    \\Your javascript/jQuery
}

$(document).ready(main);

</script>

Upvotes: 1

Related Questions