【问题标题】:node.js not printing to consolenode.js 不打印到控制台
【发布时间】:2017-06-13 01:24:59
【问题描述】:

我正在尝试在我的 api 中使用套接字。但是我在控制台中看不到日志。

我看到的唯一输出是:

[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
We are live on8000

这是我的 server.js 文件:

// server.js
const express        = require('express');
const MongoClient    = require('mongodb').MongoClient;
const bodyParser     = require('body-parser');
const app            = express();
const port           = 8000;

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

const db = require('./config/db');

app.use(express.static(__dirname + '/../app'));
app.use(bodyParser.urlencoded({ extended: true }));


MongoClient.connect(db.url,(err,database) =>{

    if (err) return console.log(err);

    //check below line changed
     require('./app/routes')(app, database);
    app.listen(port,() => {
        console.log("We are live on"+port);
    });

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


    io.on('connection',function(socket){
      console.log('client connected');

      socket.on('disconnect', function () {
        console.log('disconnect');
      });

    });

})

index.html 是:

<!DOCTYPE html>
<html>
  <head><title>Hello world</title></head>
  <script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io();
</script>
  <body>Hello world</body>
</html>

我在网络浏览器上看到 Hello world,但在控制台日志上看不到“客户端已连接”。

【问题讨论】:

  • 这就是我所拥有的。当控制台打印'We are live on8000''时,这是否意味着服务器已连接?你能告诉我如何连接到服务器吗?
  • @JaromandaX 在端口 3000 上调用 socket.io 会打印日志。但是在端口 8000 上调用它不会打印日志。你知道为什么吗?

标签: javascript node.js socket.io


【解决方案1】:

更新:在您的浏览器客户端中,您可以在 console.log http://localhost:8000/socket.io/socket.io.js 404(index):6 Uncaught ReferenceError: io is not defined 中看到错误

您已将 socket handler 附加到 http 服务器 var io = require('socket.io')(server);,但在您的代码中,您通过 express server 启动 Web 服务器

app.listen(port,() => {
        console.log("We are live on"+port);
    });

改成

server.listen(port,() => {
        console.log("We are live on"+port);
    });

【讨论】:

  • 我的客户端是 Android 和 iOS 应用程序。但是节点服务器不输出io.on()下的任何console.logs
【解决方案2】:

我创建了一个新的 .js 文件并监听端口 3000 而不是为 socket.io 工作的 8000

appsocket.js

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

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

//Whenever someone connects this gets executed
io.on('connection', function(socket){
  console.log('A user connected');

  //Whenever someone disconnects this piece of code executed
  socket.on('disconnect', function () {
    console.log('A user disconnected');
  });

});

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

现在当我调用 localhost:3000 而不是 localhost:8000 时,我可以在控制台上看到日志

【讨论】:

  • 您看到此服务器代码与原始代码有何不同?这就是它起作用的原因
  • 确实 - 我也没有看到问题:p
猜你喜欢
  • 2012-02-07
  • 2015-05-04
  • 2016-11-19
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多