नोड.जेएस और जेड

मैं जावास्क्रिप्ट के साथ बहुत अच्छा हूँ लेकिन मैं node.js और जेड के लिए बिल्कुल नया हूँ। मैं socket.io का उपयोग कर एक मूल चैट सर्वर बनाने का प्रयास कर रहा हूं (मुझे ऑनलाइन मिले एक ट्यूटोरियल के बाद) लेकिन मुझे इसे प्राप्त करने और चलाने में परेशानी हो रही है।

शुरू करने के लिए मैंने एक मूल पैकेज.जेसन फ़ाइल बनाई जिसमें निम्नलिखित कार्य शामिल थे, जब मेरी कार्यशील निर्देशिका में node_modules निर्देशिका बनाई गई थी।

{
    "name": "Chat",
    "version": "1.0.0",
    "description": "Real Time Chat",
    "dependencies": {
         "socket.io": "latest",
        "express": "latest",
        "jade": "latest"
    },
    "author": "@pattmorter"
}

अभी तक अच्छा है?

फिर मैंने server.js फ़ाइल और script.js फ़ाइल बनाई। इसके बाद मैंने UI के लिए home.jade फ़ाइल बनाई।

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

जब मैं अपना सर्वर शुरू करता हूं और 127.0.0.1:3000 पर जाता हूं, तो पेज दिखाता है लेकिन त्रुटि कंसोल में यह कहता है कि http://127.0.0.1:3000/socket.io/socket.io.js प्राप्त करें 404 (नहीं मिला) त्रुटि।

मैंने सोचा कि मैंने फ़ाइल को सही तरीके से संदर्भित किया है लेकिन मुझे लगता है कि नहीं :( मेरी विचार प्रक्रिया यह थी कि server.js फ़ाइल home.jade फ़ाइल को प्रतिपादित कर रही थी जो मेरे पास होगी जेड फ़ाइल के भीतर स्क्रिप्ट (src = 'socket.io/socket.io.js') करने के लिए।

सही दिशा में किसी भी संकेत की सराहना की जाएगी!

EDIT 1
Here is my server.js snippet

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);
        })
    });
});
0
@BrianGlaz / मदद नहीं की।
जोड़ा लेखक pattmorter, स्रोत
लगता है जैसे आपके server.js socket.io को ठीक से प्रारंभ नहीं करता है। क्या आप कुछ कोड पोस्ट कर सकते हैं?
जोड़ा लेखक robertklep, स्रोत
@Tom अगर आप socket.io को ठीक से सेट अप करते हैं तो आपको express.static द्वारा प्रदत्त निर्देशिका में कहीं भी socket.io.js फ़ाइल रखने की आवश्यकता नहीं है ; socket.io मॉड्यूल करता है वास्तव में इसके लिए अनुरोधों को संभालता है।
जोड़ा लेखक robertklep, स्रोत
/: /socket.io/socket.io.js जोड़ने का प्रयास करें
जोड़ा लेखक Brian Glaz, स्रोत

3 उत्तर

आपका socket.io प्रारंभिकरण गलत है।

इसके बजाए (जो वास्तव में मुझे चेतावनी देता है):

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

इसे इस्तेमाल करो:

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);

अंतर यह है कि socket.io की .listen() विधि http.Server उदाहरण तर्क के रूप में, जो एक्सप्रेस ' .listen() विधि वापस लौटने के लिए होता है।

app itself is an Express instance, which is something else.

0
जोड़ा
उसने ऐसा किया क्या आप तर्क दे सकते हैं कि .listen (app.listen (3000)) का उपयोग क्यों करें।
जोड़ा लेखक pattmorter, स्रोत
@pattmorter मेरा संपादन देखें :)
जोड़ा लेखक robertklep, स्रोत

robertklep उत्तर के अतिरिक्त, कृपया सॉकेट.आईओ संगतता अनुभाग।

यह express 3.x परिवर्तनों के बारे में बताता है जो टूटता है express 2.x और socket.io उदाहरण। यही कारण है कि robertklep द्वारा प्रस्तावित समाधान socket.io express सर्वर के नवीनतम संस्करण के साथ काम करने के लिए आवश्यक है।

0
जोड़ा

अपना server.js स्निपेट पोस्ट करें, क्योंकि वह जगह है जहां आप सबसे अधिक संभावना है। आपको यह सुनिश्चित करने के लिए http://socket.io पर सावधानीपूर्वक उदाहरणों का पालन करना होगा। Socket.io को उचित प्रतिक्रिया देने के लिए तारित किया गया है जब ब्राउज़र /socket.io/socket.io.js अनुरोध करता है तो socket.io क्लाइंट जावास्क्रिप्ट कोड के साथ।

0
जोड़ा