【发布时间】:2017-03-03 08:38:22
【问题描述】:
我正在尝试在 localhost 上建立一个简单的 socket.io 连接,但它不起作用。
我对我的代码的期望是,当我输入命令 node socket.js 时,它应该控制台“connected”,同时在浏览器的控制台上(我已经打开 index. html 页面)我应该在控制台中看到“Connected...”和“Something to show”。但它不起作用。
服务器运行良好,但我在终端和浏览器的控制台中都看不到数据。
我是不是做错了什么?
这是我的代码:
index.html
<html lang="en">
<head>
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://127.0.0.1:8080');
socket.on('connect', function(data) {
console.log("Connected...");
socket.on("message", function(data){
console.log(data);
});
});
</script>
</body>
</html>
socket.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json({type: '*/*'}));
var server = require('http').createServer(app);
var io = require('socket.io')(server);
app.use(express.static('/opt/lampp/htdocs/testproject/node_modules'));
io.on('connection', function(client) {
console.log("connected");
client.emit("message", "Some thing to show");
});
server.listen(8080);
我的目录结构是这样的:
htdocs/testproject/
..node_modules/
..index.html
..socket.js
编辑:但是,当我在 socket.js 中添加它时,我的代码可以工作
app.get('/home', function(req, res,next) {
res.sendFile(__dirname + '/index.html');
});
【问题讨论】:
-
是的。没有错误。让我告诉你一件事。当我在 socket.js 中添加一个 get 路由并在其中写入
res.sendFile('/opt/lampp/htdocs/testproject/index.html');时,它可以工作。我想在没有路线的情况下这样做。 -
尝试将您的 app.use 更改为
app.use(express.static('/opt/lampp/htdocs/testproject/'));然后,这应该会导致服务器至少正确地提供 index.html。如果这仍然不起作用,那么就会发生一些非常奇怪的事情,因为您的 socket.io 代码可以在我的 node.js 服务器上运行。 -
当我像您一样更改目录时,它起作用了。但只有当我在浏览器中点击 127.0.0.1:8080 时它才有效。为什么它不应该输出到 127.0.0.1:8080/testproject/index.html ?
-
"localhost:8080/" 指向那个文件夹。但是,index.html 高了一级。如果取出node_modules,“localhost:8080/”指向与index.html相同的文件夹。如果它有帮助,它会尝试获取文件“/opt/lampp/htdocs/testproject/node_modules/index.html”并且由于它不存在而默默地失败。
-
如果您有新问题,请提出新问题,如果需要,请在此处链接。不要忘记查看我的以下答案
标签: javascript node.js sockets socket.io