节点未找到包含在 html 中的 js 文件
Node is not finding js files included in html
我正在尝试使用节点和 socket.io 构建一个简单的聊天应用程序。我正在按照此处列出的教程进行操作:http://socket.io/get-started/chat/
我的问题是教程中有一些 javascript 直接放在 html 中的脚本标记中。我想将这段代码移到它自己的 js 文件中。
我创建了一个名为 chat.js 的文件,它与我的 index.html 和 index.js 在同一目录中。在我的 html 中,我将以下代码放在 header 中(我也在结束 body 标记之前尝试过)
<script type="text/javascript" src="chat.js"></script>
但是,当我在终端中 运行 节点 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');
});
node.js 不会像其他网络服务器那样自动提供任何文件。如果您希望它在浏览器请求时发送 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 收到没有特定处理程序的路由请求时,它将检查 public 子目录以查看文件是否与请求名称匹配。如果是这样,它将自动提供该文件。
我正在尝试使用节点和 socket.io 构建一个简单的聊天应用程序。我正在按照此处列出的教程进行操作:http://socket.io/get-started/chat/
我的问题是教程中有一些 javascript 直接放在 html 中的脚本标记中。我想将这段代码移到它自己的 js 文件中。
我创建了一个名为 chat.js 的文件,它与我的 index.html 和 index.js 在同一目录中。在我的 html 中,我将以下代码放在 header 中(我也在结束 body 标记之前尝试过)
<script type="text/javascript" src="chat.js"></script>
但是,当我在终端中 运行 节点 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');
});
node.js 不会像其他网络服务器那样自动提供任何文件。如果您希望它在浏览器请求时发送 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 收到没有特定处理程序的路由请求时,它将检查 public 子目录以查看文件是否与请求名称匹配。如果是这样,它将自动提供该文件。