Node.js和Jade

pat*_*ter 2 javascript node.js express socket.io pug

我对javascript非常好,但我对node.js和jade相当新.我正在尝试使用socket.io创建一个基本的聊天服务器(遵循我在网上找到的教程),但是我无法启动并运行它.

首先,我创建了一个基本的package.json文件,其中包含以下内容,当node_modules我在工作目录中运行创建目录时.

{
    "name": "Chat",
    "version": "1.0.0",
    "description": "Real Time Chat",
    "dependencies": {
         "socket.io": "latest",
        "express": "latest",
        "jade": "latest"
    },
    "author": "@pattmorter"
}
Run Code Online (Sandbox Code Playgroud)

好到目前为止对吗?

然后我创建了server.js文件和script.js文件.接下来,我home.jade为UI 创建了文件.

doctype 5
html
    head
        title Chatter
        script(src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js')
        script(src='socket.io/socket.io.js')
        script(src='script.js')
    body
        //- some other formatting stuff that works correctly
Run Code Online (Sandbox Code Playgroud)

当我启动我的服务器并转到127.0.0.1:3000时,页面显示但在错误控制台中它显示GET http://127.0.0.1:3000/socket.io/socket.io.js 404 (Not Found)错误.

我以为我正确引用了该文件,但我猜不是:(我的思维过程是因为该server.js文件正在呈现home.jade我只需要script(src='socket.io/socket.io.js')在jade文件中执行的文件.

任何暗示正确的方向将不胜感激!

编辑1
这是我的server.js片段

var express = require("express");
var app = express();
var jade = require('jade');
var io = require('socket.io').listen(app);

app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set("view options", { layout: false });
app.configure(function() {
        app.use(express.static(__dirname + '/public'));
});
app.get('/', function(req, res){
  res.render('home.jade');
});
app.listen(3000);

io.sockets.on('connection', function (socket) {
    socket.on('setPseudo', function (data) {
        socket.set('pseudo', data);
    });
    socket.on('message', function (message) {
        socket.get('pseudo', function (error, name) {
            var data = { 'message' : message, pseudo : name };
            socket.broadcast.emit('message', data);
            console.log("user " + name + " send this : " + message);
        })
    });
});
Run Code Online (Sandbox Code Playgroud)

rob*_*lep 6

您的socket.io初始化不正确.

而不是这(实际上给了我一个警告):

var io = require('socket.io').listen(app);
...
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

用这个:

var io = require('socket.io').listen(app.listen(3000));

// or a bit more elaborate:
var server = app.listen(3000);
var io     = require('socket.io').listen(server);
Run Code Online (Sandbox Code Playgroud)

不同的是,该.listen()方法socket.io需要一个http.Server实例作为论据,这就是快递的.listen()方法恰好返回.

app 本身就是一个Express实例,这是另一回事.