【问题标题】:how can i include JavaScript file in node.js app?如何在 node.js 应用程序中包含 JavaScript 文件?
【发布时间】:2014-08-06 19:42:00
【问题描述】:

我正在像这样访问 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(未找到)localhost/:12。
2) 获取 libs.js 404 (未找到) localhost/:11.
3) Uncaught ReferenceError: main is not defined (index):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 文件。

【问题讨论】:

  • 您使用的是快递吗?你配置静态资源了吗?
  • 实际上我对这些概念完全陌生,不,我没有使用过静态资源..请赐教。@MohitArora
  • neelsg 已经发布了有关此问题的答案,并且 public 是 js 文件所在的文件夹名称。
  • 哦,非常感谢..:) @MohitArora

标签: javascript jquery node.js


【解决方案1】:

如果您希望这些文件可供访问,您需要实际提供这些文件。您不能只将它们包含在您的项目目录中。如果你使用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);

【讨论】:

  • 非常感谢...我会尝试您的建议,如果可行,会更新您..:)
  • 你在这里使用过'/public'..?
  • '/public' 只是一个建议。我强烈建议你创建一个像'/public'或'/static'这样的子目录来保存你所有的静态文件。如果你静态地共享你的项目目录,那将是一个史诗般的安全失败(用户可以获得你的源代码通过在他们的浏览器中输入http://example.com/app.js 之类的内容,然后按照您的数据库连接详细信息的逻辑)。
  • 我创建了一个名为 chat 的文件夹,这些文件在其中。我将在其中创建一个名为 public ad 的文件夹,将我的 javascript 文件保存在其中,然后按照你所说的方式访问它。我只是希望我能得到你所说的,对..:) 再次thnxxx
  • 我试过了,但问题仍然存在...我是否必须更改我在问题开始时提到的 html 代码...????跨度>
【解决方案2】:

你想打电话吗:

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

【讨论】:

  • thanx 我想你发现了我的错误..我会更改代码..:) 你可以为我的帖子发布一个吗...我只是不想否定..这个问题是对我来说小鬼..我会很感激..thnx 再次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 2017-11-07
  • 2015-05-20
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2014-04-13
相关资源
最近更新 更多