我如何在node.js应用程序中包含JavaScript文件?

时间:2014-08-06 09:19:09

标签: javascript jquery node.js

我正在访问index.html中的script.js和libs.js,如下所示:

<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>

但无法访问.js文件并显示错误:

1)GET script.js 404(Not Found)localhost /:12。
2)获取libs.js 404(未找到)localhost /:11 3)未捕获的ReferenceError:未定义main(索引):17。

我哪里出错了,如何使用node.js包含这两个JavaScript文件?

我的app.js是:

 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);
    });

});

然后我有我的script.js和libs.js文件。

2 个答案:

答案 0 :(得分:2)

如果您希望这些文件可以访问,则需要实际提供这些文件。您不能将它们包含在项目目录中。如果您使用Express,则可以指定一个静态文件目录:

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

您还可以使用node-static甚至为每个文件创建处理程序...

使用express,您的代码应该看起来像这样(未经测试):

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);

答案 1 :(得分:1)

您是否打算致电:

<script>
jQuery(function($){

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

});
</script>

如果您那样,则需要将代码保存为根目录中名为script.js的文件。在html中的标签之间添加javascript / jQuery不需要调用,并且会自动运行。

我建议你也按照以下方式编写脚本,我不会认出你的方式。

<script>

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

$(document).ready(main);

</script>