2016-02-11 8 views
7

के साथ letencrypt-express मुझे नहीं मिलता है, मैं socket.io के साथ LEX को कैसे कॉन्फ़िगर कर सकता हूं। यहाँ मैं अब है:सॉकेट.आईओ

server.js

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 

app.use(bodyParser.urlencoded({limit: '50mb', extended: true })); 
app.use(bodyParser.json({limit: '50mb'})); 

var port = 80; 
if(process.argv[2] == 'dev') port = 3001; 

var router = express.Router(); 

app.use(function (req, res, next) { 
    res.setHeader('Access-Control-Allow-Origin', '*'); 
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, userId'); 
    next(); 
}); 

var api = require('./api'); 
api(app, port) 

app.use(express.static(__dirname + "/../dist")); 
app.get('/', function(req, res) { 
    res.render('index.html'); 
}); 
console.log('Magic happens on port ' + port); 

api.js

var API = function(app, port){ 
    var pg = require('pg'); 
    var lex = require('letsencrypt-express').testing(); 

    var connectedUsers = {}; 

    var config ={ 
    user: "postgres", 
    password: "password", 
    database: "production", 
    port: 5432, 
    host: "serverIpAddress", 
    ssl: false 
    }; 

    pg.connect(config, function(err, client, done) { 

    if (err) { 
     return console.error('error fetching client from pool', err); 
    } 
    // var server = require('http').Server(app); 
    var server = lex.create({ 
     configDir: './letsencrypt.config', 
     onRequest: app, 
     letsencrypt: null, 
    }); 


    var io = require('socket.io')(server); 

    server.listen(port); 

    io.on('connection', function (socket) { 
     console.log('new connection') 

    }); 
    }); 

} 

module.exports = API 

api.js में लाइन पर टिप्पणी पर एक नज़र डालें: सब कुछ ठीक काम करता है जब मैं इस का उपयोग करें का:

var server = lex.create({ 
     configDir: './letsencrypt.config', 
     onRequest: app, 
     letsencrypt: null, 
    }); 
लेक्रस के साथ

मैं सर्वर चलाने का प्रयास कर यह संदेश मिल रहा हूँ:

012,351,
[LEX] testing mode turned on 
[LEX] default server: https://acme-staging.api.letsencrypt.org/directory 


################################################### 
#             # 
#  Open up a browser and visit this server  # 
#  at its domain name.       # 
#             # 
#         ENJOY!   # 
#             # 
################################################### 


Note: testing certs will be installed because .testing() was called. 
     remove .testing() to get live certs. 


[LEX] automatic registration handling turned on for testing. 


Magic happens on port 3001 
[LEX] creating sniCallback { 
    "configDir": "./letsencrypt.config", 
    "onRequest": { 
    "domain": null, 
    "_events": {}, 
    "_eventsCount": 3, 
    "_connections": 0, 
    "_handle": null, 
    "_usingSlaves": false, 
    "_slaves": [], 
    "_unref": false, 
    "allowHalfOpen": true, 
    "pauseOnConnect": false, 
    "httpAllowHalfOpen": false, 
    "timeout": 120000 
    }, 
    "letsencrypt": { 
    "backend": {} 
    }, 
    "debug": true, 
    "webrootPath": "/var/folders/2m/vfw1bgqd4pv7hk86kcbvcrlc0000gn/T/acme-challenge", 
    "privkeyPath": "./letsencrypt.config/live/:hostname/privkey.pem", 
    "fullchainPath": "./letsencrypt.config/live/:hostname/fullchain.pem", 
    "certPath": "./letsencrypt.config/live/:hostname/cert.pem", 
    "chainPath": "./letsencrypt.config/live/:hostname/chain.pem", 
    "server": "https://acme-staging.api.letsencrypt.org/directory" 
} 
projectRootFolder/node_modules/socket.io/node_modules/engine.io/lib/server.js:358 
    var listeners = server.listeners('request').slice(0); 
         ^

TypeError: server.listeners is not a function 
    at Server.attach (projectRootFolder/node_modules/socket.io/node_modules/engine.io/lib/server.js:358:26) 
    at Function.attach (projectRootFolder/node_modules/socket.io/node_modules/engine.io/lib/engine.io.js:124:10) 
    at Server.listen.Server.attach (projectRootFolder/node_modules/socket.io/lib/index.js:226:21) 
    at new Server (projectRootFolder/node_modules/socket.io/lib/index.js:51:17) 
    at Server (projectRootFolder/node_modules/socket.io/lib/index.js:39:41) 
    at projectRootFolder/server/api.js:73:34 
    at projectRootFolder/node_modules/pg/lib/pool.js:82:9 
    at projectRootFolder/node_modules/pg/node_modules/generic-pool/lib/generic-pool.js:281:11 
    at projectRootFolder/node_modules/pg/lib/pool.js:56:18 
    at null.<anonymous> (projectRootFolder/node_modules/pg/lib/client.js:149:7) 
    at g (events.js:260:16) 
    at emitOne (events.js:82:20) 
    at emit (events.js:169:7) 
    at Socket.<anonymous> (projectRootFolder/node_modules/pg/lib/connection.js:109:12) 
    at emitOne (events.js:77:13) 
    at Socket.emit (events.js:169:7) 

मुझे लगता है, मेरे कोड में मुझे बहुत ही सरल गलती है, क्योंकि मैं एसएसएल के साथ सॉकेट.ओ को कॉन्फ़िगर नहीं कर रहा था।

धन्यवाद

उत्तर

10

इस कोड को आज़माएं। यह केवल letsencrypt-express के नवीनतम संस्करण के साथ काम करेगा।

app.js

var express = require('express'); 
var app = express(); 
var socketIO = require('socket.io'); 
var LEX = require('letsencrypt-express').testing(); 
var https = require('http2'); 

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

var lex = LEX.create({ 
    configDir: '/etc/letsencrypt' 
, letsencrypt: null 
, approveRegistration: function (hostname, cb) { 
    cb(null, { 
     domains: ['example.com'] 
    , email: '[email protected]' 
    , agreeTos: true 
    }); 
    } 
}); 

var server = https.createServer(lex.httpsOptions, LEX.createAcmeResponder(lex, app)); 
server.listen(443); 

var io = socketIO.listen(server); 
io.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

index.html

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> 
<script> 
    var socket = io.connect('https://example.com'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 
संबंधित मुद्दे