【问题标题】:Node is not finding js files included in html节点找不到包含在 html 中的 js 文件
【发布时间】:2016-01-22 12:51:17
【问题描述】:

我正在尝试使用 node 和 socket.io 构建一个简单的聊天应用程序。我正在按照此处列出的教程进行操作:http://socket.io/get-started/chat/

我的问题是本教程有一些 javascript 直接放在 html 中的脚本标记中。我想将此代码移动到它自己的 js 文件中。

我创建了一个名为 chat.js 的文件,它与我的 index.html 和 index.js 位于同一目录中。在我的 html 中,我将以下代码放在标题中(我也在结束正文标记之前尝试过)

  <script type="text/javascript" src="chat.js"></script>

但是,当我在终端中运行 node index.js 并转到本地主机时,chat.js 得到 400。我试过放置“/chat.js”以及“./chat.js”,但没有成功。这三个文件都在同一个目录中。

任何我做错的线索将不胜感激。

我的 index.js

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

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


io.on('connection', function(socket){
 socket.on('chat message', function(msg){
   io.emit('chat message', msg);
 });
});

http.listen(3000, function(){
 console.log('listening on *:3000');
});

【问题讨论】:

  • 那么,呃,创建 /chat.js 路由的 node.js 在哪里
  • 我对节点完全陌生。我是否必须对要包含的每个文件执行 app.get 方法,类似于包含 index.html 的方式?
  • 这取决于您使用什么来提供文件。如果没有,是的,但是如果您使用的是 express.js,您可以用一行提供整个文件夹。 (说句公道话,不用 express.js 也可以做到这一点,只需要多一行)

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


【解决方案1】:

node.js 不会像其他 Web 服务器那样自动提供任何文件。如果您希望它在浏览器请求时发送chat.js,则必须在您的 node.js 代码中为它创建一个路由,以便 Web 服务器发送它。

如果您使用 Express 框架之类的东西,这可以在一行代码中使用app.use(express.static(...)) 完成。

注意在您链接到的演示中,/ 路径有一个特定的路径。 /chat.js 需要类似的路由,或者您可以使用 app.use(express.static(...)) 配置自动提供整个目录的文件。

将来,如果您展示您的实际服务器代码,那么我们可以更具体地帮助您提供适合您服务器的实际代码。


现在您已经显示了您的代码,您可以为/chat.js 添加特定路由:

app.get('/chat.js', function(req, res){
    res.sendFile(__dirname + '/chat.js');
});

或者,如果您将 chat.js 移动到应用代码下的 public 子目录中,那么您可以使用以下命令自动提供该目录中的所有文件:

app.use(express.static('public'));

当 Express 收到对没有特定处理程序的路由的请求时,它将检查公共子目录以查看文件是否与请求名称匹配。如果是这样,它将自动提供该文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多