在客户端加载.js文件,其中包含Node JS提供的页面

时间:2013-05-18 17:27:42

标签: javascript jquery node.js express socket.io

我有以下简单的JS文件,对于使用Socket.IO与NodeJS和Express框架的人来说,这看起来很熟悉:

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

server.listen(8374);

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

index.html中,我有以下代码行:

<script src="/socket.io/socket.io.js"></script>

我已经做了一些路径名和服务/安装的实验,但我仍然不明白这个客户端线如何工作。 this question的答案是,通过监听serverio处理所有传入的Socket.IO请求。

...

我的问题是:这可以为其他客户端JS文件完成吗?

例如,是否有一些简单的方法来捆绑JQuery,以便可以以相同的方式处理它?目前我可以将文件放在public这样的文件夹中,并使用Express app.use() method,以便在index.html中我可以包含此行:

<script src="/public/jquery-1.9.1.js"></script>

有没有办法像使用NodeJS一样管理JQuery作为依赖项?

我认为最终结果看起来像这样:

服务器端:

var jquery = require('jquery');

客户端:

<script src="jquery/jquery-1.9.1.js"></script>

2 个答案:

答案 0 :(得分:0)

我不太确定使用模块来托管特定文件,但是在请求文件时托管文件会更加节省时间:

app.get("/", function (req, res) {
    res.sendfile(__dirname + "/index.html");
});
app.get("/public/jquery-1.9.1.js", function (req, res) {
    res.sendfile(__dirname + "/public/jquery-1.9.1.js");
});

我不使用Express,所以请原谅任何错误。

答案 1 :(得分:0)

express 2.x 中,许多人过去习惯使用“dynamicHelpers”。你的app.js中有类似的东西

app.dynamicHelpers({
    scripts: function (){ 
      return ['/js/jquery.min.js', '/js/jquery.ui.min.js']
    }
})

在你使用玉的布局中你会这样做。

- each s in scripts
    script(type='text/javascript', src= s)

现在已删除app.dynamicHelpers,因此在 express 3.x 中,您需要为此创建一个简单的模块,或者只是内联。在您的配置或特定环境中使用app.use(如果需要)。类似的东西。

app.use(function (req, res, next){
   res.locals.scripts = ['/js/yourscript.js', '/js/yourotherscript.js']
   next();
}

在玉石布局中使用它会是一样的。如果我正确地理解你,这将是包含这些脚本的一种方式。我个人宁愿把它们静态地包括在内。